[PHP] PCRE-Regexp - Probs...
watchout 11.06.2004 - 12:24 704 2
watchout
Legendundead
|
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: $t="<tag1>textA<tag2>textB</tag2>textC</tag1>";
$t=preg_replace("/(<[^>]+>)([^<]+)(<[^>]+>)/U",'$1<CDATA>$2</CDATA>$3',$t);
ergibt: <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
regexp_55841.txt (downloaded 78x)
Bearbeitet von watchout am 11.06.2004, 14:09 (solved state)
|
watchout
Legendundead
|
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
|
watchout
Legendundead
|
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: "/(<[^>]+> ([^<]+)( ?=<[^>]+> /"
|