Jackery IFA Fireplace

Regex - negieren von Ergebnissen bzw. substrings

2TAKTER

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
399
Hallo zusammen

Ich habe folgenden String:
aaa[]aa ds ds78 ]ds8 7z9u09d us0d us]d0 ]sdiu0 sd[ddssu77dsa7 d]u ds0 aaaa]aaa23[456]78 [ f8sf] s8d9f ]s9f8 9fsj sd9 ABC]ABC

In diesem möchte ich nun alle ] finden, die keine "Eröffnung" haben, also [

Ich habe diesen Ausdruck geschrieben:
Code:
(?<!\[)\]

Damit wird allerdings aus dem String nur alles ausgenommen, was wirklich [] ist. Die ] des Substrings [456] z.B. ist immernoch ein Match.

Nun habe ich meinen Ausdruck geändert in:
Code:
(?<!\[[0-9]*?)\]

Nun hat er überhaupt kein Match mehr


Dann ersetze ich den * und das ? einfach mal mit folgendem
Code:
(?<!\[[0-9][0-9][0-9])\]

Und schon exkludiert er diesen String wie er soll...
Mein Ziel sollte eigentlich wie folgt aussehen:

aaa[]aa ds ds78 ]ds8 7z9u09d us0d us]d0 ]sdiu0 sd[ddssu77dsa7 d]u ds0 aaaa]aaa23[456]78 [ f8sf] s8d9f ]s9f8 9fsj sd9 ABC]ABC

Hatte gedacht, dass dafür folgendes reicht:
Code:
(?<!\[[A-Za-z0-9 ]*?)\]

Aber keine Chance bisher :-\

Danke im Voraus
 
vielen Dank

Ich habe nun diesen String
aaa[]aa ds ds78 ]ds8 7z9u09d us0d us]d0 ]sdiu0 56[7,8]9 sd[ddssu77dsa7 d]u ds0 aaaa]aaa[2.5]3[456]78 [ f8sf] s8d9f ]s9f8 [9fsj] sd9 ABC]ABC [4567-890]

mit folgendem Ausdruck zerlegt:
Code:
(?<!\[)(?<![A-Za-z0-9\.,])\]

Aber du hast Recht, die eine verschachtelte bekomme ich nicht hin, aber das ist ok so.

Vielen Dank nochmal für die Hilfe
 
Reguläre Ausdrücke können korrekte Klammerung nicht überprüfen, denn reguläre Ausdrücke können sich nichts merken. Dafür brauchst du mindestens einen Kellerautomaten, also eine Kontextfreie Grammatik.

Theoretische Informatik.
 
Zuletzt bearbeitet:
Dem muss ich widersprechen. Ob eine Klammerung korrekt ist oder nicht lässt sich schon prüfen z.B. mit
Code:
(?<=\[)[^]+?(?=\]|$)

Dies würde bei
Die ist ein [Wert] in Klammern und das] nicht.
genau auf den String "Wert" treffen.

Was nicht geht, falls das gemeint ist, sind mehrfach Klammerung. Aber ich denke ich habe einen guten Weg gefunden. Wenn ich eine Lösung habe, poste ich sie hier falls es jemanden interessiert :)


EDIT:

Also prinzipiell wird es jetzt "einfach"

Mein String:
Die ist[] ein [Wert] in Klammern und das] nicht, aber das [12345] und [...].
Mein Ausdruck:
Code:
(?<!\[Wert)\]
Mein Match:
Die ist[] ein [Wert] in Klammern und das] nicht, aber das [12345] und [...].

Man sieht, dass "Wert" hier erkannt wird und er deswegen diese Klammer niccht berücksichtigt, super! Genau das will ich jetzt mit ellen Korrekten klammern.
Statt Wert muss nun eben irgendein Alphanumerischer Platzhalter rein inklusive punkt, komma usw.

Oder ist das wirklich nicht möglich?
 
Zuletzt bearbeitet:
Ist zwar OT und es muss auch nicht wirklich darauf eingegangen werden, möchte nur ein wenig verschiedene Aussagen ins richtige Licht rücken...
2TAKTER schrieb:
Was nicht geht, falls das gemeint ist, sind mehrfach Klammerung
Das war ja genau das, was F_GXdx meinte... wenn man von Klammerung spricht und Verschachtelung nicht explizit ausschließt, ist sie eigentlich implizit dabei...
 
Zurück
Oben