Wie kann ich ein Regex erstellen, der alles nimmt, außer diese bestimmten Wörter?
Hi, ich möchte ein Regex erstellen, der alles matched, außer Wörter die nur aus klein Buchstaben bestehen und mit en enden und alle Wörter außer Wörter die mit einem Großbuchstaben anfangen und dann Kleinbuchstaben folgen.
Also der Regex soll alles matchen, was nicht aus reinen klein Buchstaben besteht und mit en endet und alles, was nicht mit einem Großbuchstaben beginnt, gefolgt von mindestens einem Kleinbuchstaben.
Z. B. sowas sollte der Regex abfangen:
AAfjeui82 oder AB oder ZZ oder esihfeie (hier, weil es nicht mit en endet) Oder Hallo83 oder A oder Z oder U
Aber es soll nicht Sachen wie:
Hallo
Essen
essen
ien
Wi
etc. abfangen, also Wörter die nur aus klein Buchstaben (mindestens 3 Stück) bestehen und mit en enden und keine WÖrter, die mit einem Großbuchstaben anfangen und Kleinbuchstaben folgen.
2 Antworten

Ok, mal schauen ob ich das richtig verstanden habe:
Du willst einen Match auf Wörter mit einem Großbuchstaben am Anfang und beliebig vielen kleinen Buchstaben danach... oder mindestens ein kleiner Buchstabe am Anfang, aber dann ein "en" am Schluss.
Das wäre dann so etwas hier:
^([A-Z][a-z]*|[a-z]+en)$
Testen kannst du das übrigens auf der Seite https://regex101.com/
Dort kannst du den regex in die obere Zeile eintragen und dann darunter testen ob dein Text richtig erkannt wird. Kopiere einfach mal deine gesamte Frag in das untere Feld und schaue nach ob alles so angezeigt wird wie du dir das vorstellst.

Nein, ich möchte ein match auf die Wörter, die das nicht erfüllen haha. Also die nicht mit einem klein Buchstaben Anfangen und mit en enden oder mit einem großbuchstaben und dann nur klein Buchstaben

Also umgekehrt als du geschrieben hast? Du hast geschrieben es soll so etwas wie "Hallo" nicht abfangen.

Ok, dann wäre das hier möglicherweise das richtige regex:
^([A-Z](?>\w*[A-Z0-9]+\w*)?|[a-z]+(?<!en)|en)$
Und falls du einen längeren Text und nicht nur ein Wort untersuchst, dann musst du auf Wortgrenzen prüfen, also etwa so:
\b([A-Z](?>\w*[A-Z0-9]+\w*)?|[a-z]+(?<!en)|en)\b
teste es mal

Das müsste mit Lookarounds (Lookahead und Lookbehind) funktionieren.
Oder Du matchst einfach das, was Du *nicht* willst und prüfst, dass die Bedingung *nicht* erfüllt wird.

Zwei fortgeschrittene Features von Regex
Die Suchmaschine deiner Wahl hilft dir sicher weiter ;)
Das Thema sprengt hier den Rahmen.
Was genau sind looksrounds?