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.
<p>{{akarmi}}</p>
<for akarmi as -5>
<p>Kanada</p>
		<for valami as +5>juli=2<br></for>
{{akarmi}}
{{mas = $akarmi+$akarmi}}
<br>{{mas}}
<if juli == "3" && kakadu == 5>
	juli=3<br>
</if>
<br>
</for>
vége
<br>
A preg_replace:
$reg = /(<for |<if )((?:!>).)*(\b(akarmi|valami|juli|kakadu)\b)/
$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