[PHP] PCRE-Regexp - Probs...

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_pcre-regexp_probs_116853/page_1 - zur Vollversion wechseln!


watchout schrieb am 11.06.2004 um 12:24

Hi leute :)

Jetz steh' ich mal im sand: Ich brauch(hab) für eine art html->xml konvertierung eine regexp, welche mir die freien char-daten in einen <CDATA>-tag packt, ich bin auch schon relativ fertig, leider trifft die regexp nicht auf den fall "</tag1>text</tag2>" zu, und ich weiss nicht warum... :(

als beispiel:

Code:
$t="<tag1>textA<tag2>textB</tag2>textC</tag1>";
$t=preg_replace("/(<[^>]+>)([^<]+)(<[^>]+>)/U",'$1<CDATA>$2</CDATA>$3',$t);
ergibt:
Code:
<tag1><CDATA>textA</CDATA><tag2>textB</tag2><CDATA>textC</CDATA></tag1>
der "textC" sollte aber auch in einem <cdata> verpackt sein, sonst hab ich ein prob mit dem xml-parser...

sieht jemand meinen fehler? :)


ps: ich weiss dass die regexp auch auf <tag>text</tag> zutrifft, das nehm' ich aber in kauf, da sie andernfalls extrem kompliziert werden würde...
pps: das forum macht irgendwas mit der regexp - im anhang is sie nomal im reinformat - oder sie sollte es sein :rolleyes:


watchout schrieb am 11.06.2004 um 13:42

aaalso, mr.zet hat mich da grad auf einen kleinen fehler hingewiesen:
und zwar wird in obigem beispiel nämlich "textB" nicht in die tags eingeschlossen, jedoch, wenn ich folgenden text nehme:
<tag1><tag2>textB</tag2>textC</tag1>

kommt das raus:
<tag1><tag2><CDATA>textB</CDATA></tag2>textC</tag1>

also wenn ich textA weglass...

es wird immer lustiger :rolleyes:


watchout schrieb am 11.06.2004 um 14:07

aah, problem mit hilfe von mr.zet solved :)

erklärung:
nehmen wir "<tag1>textA<tag2>textB</tag2>textC</tag1>"
der parser matched <tag1>textA<tag2> -> passt
jetzt is der cursor aber schon nach <tag2>, demnach is der nächste match erst wieder bei </tag2>textC</tag1>

das kann man mit einem lookahead lösen, der ja die cursorposition nicht ändert:
"/(<[^>]+>;)([^<]+)(?=<[^>]+>;)/"




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025