php PCRE Regex optimizasyonu

0 Cevap php

oldukça ben birini optimize etmek için çalışıyor, ya da bunu yapmak için daha iyi yollar olup olmadığını en azından bilmek ediyorum regexes yeni.

İşte benim giriş dizesi:

$str = 'Some text
spanned on
several lines
txt_to_grab1 fixed_text1 txt_to_grab2
Full line to grab
txt_to_grab3 fixed_text2 txt_to_grab4
Some text after';

I'm trying to grab the lines from "txt_to_grab1" to "txt_to_grab4", but only the words "txt_to_grabX" and the line "Full line to grab".
I want to preserve everything untouched before and after (ie line breaks), but remove line breaks inside the lines i grab (as each line will be a <tr> that'll go into an html table).

Regex desen / replace i eşleşen bulundu:

$find = "#(?<=\n)(.*?) fixed_text1 (.*?)(\n.*?\n)(.*?) fixed_text2 (.*?)(\n)#i";
$replace = '"$1" && "$2" grabbed.$3"$4" && "$5" grabbed.$6';   

$find = "#(.*)(?<=\n)(.*?) fixed_text1 (.*?)(\n)(.*)(?<=\n)(.*?) fixed_text2 (.*?)(\n.*)#is";
$replace = '$1"$2" && "$3" grabbed.$4$5"$6" && "$7" grabbed.$8';

Questions :

Iyi / kısa / hızlı desenler vardır: Tüm sorular olarak özetleyebilirim olabilir?

  • desenler \ r \ n veya \ n biriyle çalışmak nasıl? Ben (r \? \ N) bir çözüm olacağını yığınında yerde okumak, ama geriye ilerleme bunları kullanmak için nasıl bilmiyorum. Örneğin aşağıdaki desenler çalışır, ama (sadece \ n geriye ilerleme kullanıldığı gibi, beklenmeyen sonuçlar doğurabilir kirli) onları sevmiyorum:

    "#(?<=\n)(.*?) fixed_text1 (.*?)(\r?\n.*?\r?\n)(.*?) fixed_text2 (.*?)(\r?\n)#i"
    "#(.*)(?<=\n)(.*?) fixed_text1 (.*?)(\r?\n)(.*)(?<=\n)(.*?) fixed_text2 (.*?)(\r?\n.*)#is";
    
  • daha iyi, nasıl "s" kullanmak çok kullanmak için güçlü olmak, desen tüm çizgi sonlarını kaldırmak için değiştirici (. *?) ama yine de ben istediğimi kapma? Kelime sınırları?

  • satırlı modu (m değiştirici) burada yardımcı / yararlı olur?

Bazı sağlamak eğer gerçekten regexes, açıklanması olurdu gibi :)

0 Cevap