Manchmal tue ich mich mit regulären Ausdrücken schwer.
Ich suche in einem String nach _( es sei denn er enthält __(
In diesem Text :
_(Ich soll gefunden werden)
__(Ich soll nicht gefunden werden)
soll also die zweite Zeile nicht gefunden werden. Kann mir einer mit dem regulären Ausdruck auf die Sprünge helfen ? Das nicht bekomme ich über ^((?!__).)*$ hin und das suchen nach _( über _\( aber wie kombiniere ich die beiden ?
Die Spezifikation ist mal wieder grob unvollständig
.
Ist wirklich so wie in deinen beiden Beispielen dass die Zeilen immer mit einem Unterstrich beginnen, oder kann der zu findende Text auch mitten in einer Zeile stehen?
Im ersten Fall gibt
einen Match auf die erste Zeile, aber nicht auf die zweite, und die capture group 1 enthält "Ich soll gefunden werden".
Falls der Text irgendwo innerhalb einer Zeile auftauchen kann wird es komplexer.Das hier scheint zu funktionieren:
Code:
^_\(([^\)]+)|[^_]_\(([^\)]+)
Leider taucht der gefundene Text dann nicht immer in der gleichen capture group auf; wenn die zweite Bedingung den Match liefert ist die erste group leer und die zweite enthält den Text.