URL: https://www.overclockers.at/coding-stuff/php_pcre-regexp_probs_116853/page_1 - zur Vollversion wechseln!
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:
ergibt:Code:$t="<tag1>textA<tag2>textB</tag2>textC</tag1>"; $t=preg_replace("/(<[^>]+>)([^<]+)(<[^>]+>)/U",'$1<CDATA>$2</CDATA>$3',$t);
der "textC" sollte aber auch in einem <cdata> verpackt sein, sonst hab ich ein prob mit dem xml-parser...Code:<tag1><CDATA>textA</CDATA><tag2>textB</tag2><CDATA>textC</CDATA></tag1>
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
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