12 Stimmen

Regulärer Ausdruck: Suche nach Bereichen außer einem Buchstaben oder einem Bereich

Wie kann ich die Negation in eckigen Klammern als Ausnahme verwenden, um z. B. alles zwischen a-z zu finden, außer dem Bereich von m-o? [a-z^m-o] ?

Übrigens: Ich frage nicht um des Beispiels willen, sondern um Bereiche innerhalb von Bereichen oder sogar einzelne Buchstaben innerhalb von Bereichen ausschließen zu können. Ich bin mir ziemlich sicher, dass es in diesem Beispiel berechnet werden kann.

Ich verwende die Zend-Engine (PHP).

0 Stimmen

Eine triviale Lösung wäre [a-mo-z]

2 Stimmen

Beide Kommentare sind falsch, Leute.

1 Stimmen

@Pointy: Entweder das oder die Frage ist falsch. Siehe den Titel.

29voto

kennytm Punkte 488916

Sie sollten in der Lage sein, die Differenz selbst zu berechnen.

[a-lp-z]

Wenn die Regex-Engine Lookahead-Assertion unterstützt, können Sie

(?![m-o])[a-z]

aber das wäre wahrscheinlich weniger effizient.

0 Stimmen

Beachten Sie, dass die Regex mit "(?:(?![m-o])[z-z])+" gruppiert werden sollte, wie @Wiktor Stribizew dazu bemerkte Frage (zumindest in Python).

0 Stimmen

Der Sinn der Gruppierung des Vorspanns mit dem einzuschränkenden Muster ist, dass ein Quantifizierer, der nach der Zeichenklasse platziert wird, sich nur auf diese Klasse bezieht und nicht auf den Vorspann. In diesem Fall, z.B. (?!n)[a-z]+ wird nur der erste Buchstabe eingeschränkt, d. h. er passt zu mnnnn , aber nicht nmmmm . Wenn sie gruppiert sind, wird jedes der übereinstimmenden Zeichen eingeschränkt.

19voto

ig0774 Punkte 36899

Zusätzlich zu dem, was Kenny erwähnt hat:

  1. Das JDK unterstützt (zumindest) diese Syntax:

    [a-z&&[^m-o]]

  2. Ein Paar von Engines (einschließlich des .NET-Frameworks) unterstützen dies:

    [a-z-[m-o]]

0 Stimmen

Sehr informativ, allerdings funktioniert keines dieser Programme mit PHP :(

0 Stimmen

Im mit Python... alle guten Alternativen zu den oben genannten Mustern?

2 Stimmen

@Justin: Die regex Paket unterstützt eine ähnliche Syntax, z.B., [a-z--[m-o]] oder die akzeptierte Antwort verwenden, die mit so ziemlich jeder Regex-Engine funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X