ugrás a tartalomhoz

preg_replace regexp

gtoma · 2014. Feb. 18. (K), 10.02
Sziasztok!

Van egy kódom. abban szeretnék bizonyos szavak elé $ jelet tenni.
  1. <p>{{akarmi}}</p>  
  2. <for akarmi as -5>  
  3. <p>Kanada</p>  
  4.         <for valami as +5>juli=2<br></for>  
  5. {{akarmi}}  
  6. {{mas = $akarmi+$akarmi}}  
  7. <br>{{mas}}  
  8. <if juli == "3" && kakadu == 5>  
  9.     juli=3<br>  
  10. </if>  
  11. <br>  
  12. </for>  
  13. vége  
  14. <br>  
A preg_replace:
  1. $reg = /(<for |<if )((?:!>).)*(\b(akarmi|valami|juli|kakadu)\b)/  
  2. $valami = preg_replace($reg'$1$$3'$code);  
Hiba:
Az <if juli == "3" && kakadu == 5> kódrészletben a kakadu -t nem találja.

Előre is köszönöm a segítséget!
 
1

Elfogyasztotta

Poetro · 2014. Feb. 18. (K), 11.08
Azért nem találja mert a <if már elfogyasztotta. A reguláris kifejezés a szöveg elején indul, majd lépked előre, és csak ritkán néz visszafelé. Neked valami olyanra lenne szükséged, ami nem fogyasztja el az előfeltételt, vagy több lépésben kellene a reguláris kifejezéseid eredményeit feldolgozni. Mondjuk először kiszeded a <for> és <if> elemeidet a tartalmukkal együtt egyetlen reguláris kifejezéssel, majd a tartalmukat egy másikkal dolgozod fel.
2

Féltem tőle,

gtoma · 2014. Feb. 18. (K), 11.59
hogy ez lesz a válasz. Köszönöm, akkor sajnos 2 lépésben kell csináljam.
3

assertions?

razielanarki · 2014. Feb. 18. (K), 18.10
kicsit advancedebb téma, de így (is) megoldhatod, megadhatóak olyan ellenőrzések amik nem "eszik meg" a karaktereket, és azt nézik h a match előtt/után mi következik.

http://www.php.net/manual/en/regexp.reference.assertions.php