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 :)