seth: RegExp - Problem mit lookahead assertion

Beitrag lesen

gudn tach!

ich habe einen HTML-Text, den ich in zwei Hälften trenne.

zu welchem zweck? (das kann beim loesen des problems hilfreich sein.)

Jetzt kann es allerdings noch sein, daß ein Tag am Ende der ersten Texthälfte nicht geschlossen ist.

kann im string sowas wie <br /> oder <br> (ohne end-tag) vorkommen?

"Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p><p class="divider"></p><p>Integer pulvinar dolor a augue. Sed ac urna. Suspendisse <span class="foo">potenti."
Ich versuche nun dieses nicht geschlossene SPAN-Element so zu erwischen:
/<([^>\s/]+)(\s+[^>]*)>.*(?!</\1>)$/smU

Leider aber matcht dieser Ausdruck dies:
0 = <p class="divider"></p><p>
1 = p
2 = class="divider"

Das verstehe ich nicht.

dann gehen wir's einzeln durch:
 < sucht '<' und findet als erstes das erste vorkommende '<'

</p><p class="divider">[...]
 ^ das da

danach soll aber mindestens ein [^>\s/] folgen, also springen wir zum naechsten '<' (da dem ersten ein '/' folgt)
 <p class="divider">[...]
 ^^ passt
 $1 ist jetzt 'p'

als naechstes soll mindestens ein \s gematcht werden.
 <p class="divider">[...]
 ^^^ passt
 $1 ist 'p'
 $2 ist bisher ' '

danach beliebig viele [^>] und danach ein '>'.

<p class="divider">[...]
 ^^^^^^^^^^^^^^^^^^^ passt
 $1 ist 'p'
 $2 ist ' class="divider"'

der rest .*(?!</\1>)$
ist also .*(?!</p>)$
und damit dasselbe wie .*$, denn nach dem letzten zeichen (vor dem naechsten zeilenumbruch oder stringende) steht nun mal nicht '</p>'.

dass allerdings
$0 == '<p class="divider"></p><p>'
ist, laesst mich vermuten, dass dahinter z.b. ein \n steht. sonst muesste $0 bis zum letzten zeichen gehen.

Mein Ausdruck sagt doch: suche ein <foo ...>...., dem bis zum Ende des Textes kein </foo> folgt.
Oder?

nee, eher sowas: suche ein <foo ...>...., welchem nach dem Ende des Textes kein </foo> folgt. ;-)

prost
seth