Zeichenfolge soll nicht vorkommen in regulärem Ausdruck

Jakob

Aktives Mitglied
Thread Starter
Dabei seit
05.01.2004
Beiträge
1.070
Reaktionspunkte
21
Hallo,

folgender Code:
HTML:
<tr>
<td>needle1</td><td>$needle2$</td>
</tr>
<tr>
<td>belangloser Text</td><td>belangloser Text</td>
</tr>

Das Problem ist, dass die zwei auch
HTML:
<tr>
<td>needle1</td><td>belangloser Text</td>
</tr>
<tr>
<td>$needle2$</td><td>belangloser Text</td>
</tr>

gefunden werden, was sie nicht sollen. Gibt es einen Ausdruck, mit dem ich sagen kann, dass eine bestimmte Zeichenkette dazwischen nicht sein soll, oder nur einmal vorkommen darf? In diesem Fall soll er bei dem ersten vorkommenden </tr> eben stoppen.

Ich kenne nur [^n], wo n ein Zeichen ist, aber eben keine Zeichenkette.

Falls ihr den RegEx sehen wollt:
Code:
<td>.*?(needle1).*?([$].*?[$]).*?<\/td>\si

Er ist einfach ein Stück zu greedy. Hoffe das ist einigermaßen verständlich.
 
Ja, mache es derzeit in PHP, schwenke aber vll. auf Java um. Die RegEx bleiben aber recht gleich. Danke für den Link, bin aber mittlerw. relativ fit in RegEx.

Das Problem ist, dass selbst bei ungreedy (oben durch das ? hinter .*) er über die erste </tr> weiter geht, wenn dahinter ein Ausdruck steht, so dass der RegEx doch noch zutrifft.

Damit kann man es nicht abfangen. Gibt's nichts gegen Zeichenketten? Es gibt doch manchmal die RegEx-Gurus! :)
 
Zurück
Oben Unten