RegEx Problem
molleonline
- php
Hallo,
ich versuche ein HTML Dokument mit RegEx zu parsen und stoße gerade auf folgendes Problem:
wie schaffe ich es, dass beim String
<test><test><test>x
<test><value>x
und der RegEx /><(.+?)>x/ims
nur value gefunden wird und nicht test><test und value?
Das Problem ist nämlich, dass das zu parsende HTML Dokument sich ständig ändert und überall sich wiederholende Zeichenfolgen hat, sodass das ganze nur funktionieren würde, wenn das (.+?) auch wirklich nur bis zum nächsten > geht und nicht bis zum nächsten >x
Ich hoffe, ihr versteht das so wie ich das beschreibe, da ich hier seit Stunden an dem Problem arbeite und total am Ende bin :(
Gruß molleonline
ich versuche ein HTML Dokument mit RegEx zu parsen
html oder xhtml?
wenn du zb ein wohlgeformtes xhtml-dokument hast, kannst du das ganze relativ problemlos mit einem xml-parser lesen - das ist wesentlich effizienter als mit einem tagsoup-parser zu arbeiten
einem tagsoup-parser zu arbeiten
ersetze durch:
einem selbstgeschriebenen parser bestehend aus regulären ausdrücken zu arbeiten
ich versuche ein HTML Dokument mit RegEx zu parsen und stoße gerade auf folgendes Problem:
wie schaffe ich es, dass beim String<test><test><test>x
<test><value>xund der RegEx /><(.+?)>x/ims
nur value gefunden wird und nicht test><test und value?
Verstehe ich dich richtig?
Du willst, dass x nur dann gefunden wird, wenn es durch <value> angeführt wird?
Du möchtest aber nicht <value> als Teil der Rückgabe.
Problemlösung in perl mit positiv lookbehinds
my $tag = '<value>';
/(?<=$tag)([^<>]*)/
Eine Einschränkung haben lookbehinds: Der Suchstring muss eine feste Länge haben.
Nach PHP portieren musst du selbst.
mfg Beat
gudn tach!
Problemlösung in perl mit positiv lookbehinds
my $tag = '<value>';
/(?<=$tag)([^<>]*)/
Eine Einschränkung haben lookbehinds: Der Suchstring muss eine feste Länge haben.
ab perl 5.10 gilt das fuer zero-width positive look-behinds nicht mehr:
/$tag\K[^<>]*/
Nach PHP portieren musst du selbst.
zumindest der regexp lautet in php auch so. (dort gibt's auch \K)
prost
seth