Kann ein regulärer Ausdruck verwendet werden, um eine beliebige Zeichenfolge außer einer bestimmten Zeichenkettenkonstanten zu finden, sagen wir "ABC"? Ist es möglich, nur eine bestimmte String-Konstante auszuschließen? Vielen Dank im Voraus.RegEx zum Ausschließen einer bestimmten Zeichenkettenkonstante
Antwort
Dies ist nicht einfach, es sei denn, Ihre Regexp-Engine hat spezielle Unterstützung dafür. Der einfachste Weg, um eine Negativ-Spiel-Option, zum Beispiel zu verwenden wäre:
$var !~ /^foo$/
or die "too much foo";
Wenn nicht, Sie haben etwas Böses zu tun:
$var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/
or die "too much foo";
Dass man im Grunde sagt, „wenn es mit nicht startet - f
, der Rest kann alles sein, wenn es mit f
, nicht o
beginnt, kann der Rest alles sein; andernfalls, wenn es fo
startet, sollte das nächste Zeichen besser kein anderes sein o
".
Das erlaubt nicht die leeren Zeichenfolgen 'f',' fo' und 'foo'. – Gumbo
@Gumbo: Es erlaubt die leere Zeichenfolge ganz gut; Beachten Sie, dass ($) die erste Alternative ist, also wird^$ (leere Zeichenfolge) akzeptiert. Ich habe es getestet, und zumindest in Perl 5.0.10 wird der leere String akzeptiert. – derobert
... sorry, perl 5.10.0, natürlich! – derobert
Sie müssen eine negative Lookahead Assertion verwenden.
(?!^ABC$)
Sie könnten zum Beispiel Folgendes verwenden.
(?!^ABC$)(^.*$)
Wenn dies in Ihrem Editor nicht funktioniert, versuchen Sie dies. Es wird geprüft, in Ruby und JavaScript zu arbeiten:
^((?!ABC).)*$
Dies funktioniert, wenn Sie nach einer Zeichenfolge suchen, die ABC nicht enthält. Aber ist das das Ziel? Oder ist das Ziel, jedem Charakter außer ABC zu entsprechen? –
Danke, dass du das unterstrichen hast, du hast Recht - mein Vorschlag vermeidet nur Strings, die mit ABC beginnen - ich habe vergessen, die Behauptung zu verankern. Ich werde das korrigieren. –
Das ist immer noch anders als das, was ich dachte. Vielleicht wird der Fragesteller klären, wonach sie suchen. –
Sie negative Vorschau verwenden könnte, oder so etwas wie folgt aus:
^([^A]|A([^B]|B([^C]|$)|$)|$).*$
Vielleicht könnte es ein wenig vereinfacht werden.
In .NET können Sie zu Ihrem Vorteil wie folgt verwenden Gruppierung:
http://regexhero.net/tester/?id=65b32601-2326-4ece-912b-6dcefd883f31
Sie werden bemerken, dass:
(ABC)|(.)
alles außer ABC in der zweiten Gruppe greifen wird. Klammern umgeben jede Gruppe. So (ABC) ist Gruppe 1 und Gruppe 2.
Also nur Sie die zweite Gruppe wie diese greifen in einem ersetzen (.):
$2
Oder in .NET Blick auf die Gruppen Sammlung innerhalb der Regex-Klasse für ein wenig mehr Kontrolle.
Sie sollten in den meisten anderen Regex-Implementierungen etwas Ähnliches tun können.
UPDATE: Ich habe einen viel schnelleren Weg gefunden, dies zu tun hier: http://regexhero.net/tester/?id=997ce4a2-878c-41f2-9d28-34e0c5080e03
Er verwendet immer noch die Gruppierung (ich einen Weg nicht finden kann, die nicht Gruppierung nicht verwendet). Aber diese Methode ist über 10X schneller als die erste.
diesem regulären Ausdruck Versuchen:
^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$
Es beschreibt drei Fälle:
- weniger als drei beliebige Zeichen
- genau drei Zeichen, während entweder
- die erste nicht ist
A
oder - die erste ist
A
aber die zweite ist nichtB
oder - die erste ist
A
, die zweiteB
aber das dritte ist, dass Sie nichtC
- die erste nicht ist
- mehr als drei beliebige Zeichen
- 1. Regex zum Auslassen/Ausschließen der ersten Zeile
- 2. RegEx-Muster zum Ausschließen von Dateinamen mit bestimmter Zeichenfolge
- 3. Ausschließen von Tests aus einer bestimmten Kategorie
- 4. Ausschließen einer bestimmten URL aus Varnish Cache
- 5. RegEx - Matched Muster ausschließen
- 6. Regex zum Aufteilen einer Zeichenfolge nach bestimmten Word Javascript
- 7. Regex Help: Ausschließen von Zeichen
- 8. Regex zum Ausschließen von Wörtern für Werkzeug finden
- 9. Regex nur Teil einer bestimmten Linie
- 10. AngularJS ng-Optionen zum Ausschließen eines bestimmten Objekts
- 11. Google Analytics: mit Regex ausschließen
- 12. PCRE Regex - ausschließen einige Fälle
- 13. Lesen Sie alle Dateien in einem bestimmten Verzeichnis ausschließen einige mit bestimmten Regex in Python
- 14. Regex Übereinstimmung, die bestimmte Muster ausschließen
- 15. Ausschließen das letzte Zeichen eines Regex
- 16. java regex ausschließen bestimmte Zeichenfolgen aus einer größeren
- 17. Regex: Übereinstimmungssequenz von nicht einer bestimmten Zeichenfolge
- 18. Python Pandas: ausschließen Zeilen unterhalb einer bestimmten Frequenz Zahl
- 19. Mysql Query Einen bestimmten Eintrag ausschließen
- 20. Regex zum Ersetzen bestimmter Zeichen vor und nach bestimmten Teilzeichenfolgen
- 21. Ein Teil aus bestimmten Ansichten ausschließen
- 22. Ausschließen von Verzeichnis von Regex-Weiterleitung
- 23. Regex schließen einzelne aber doppelten Bindestrich ausschließen
- 24. Regex ausschließen Wort (XML Schema Geschmack)
- 25. regex Informationen aus bestimmten Datei
- 26. Link zu bestimmten Benutzern ausschließen PHP
- 27. SQL Server: Zeilen mit bestimmten Werten ausschließen
- 28. einen bestimmten Pfad von allen Benutzersuchen ausschließen
- 29. Übereinstimmende Zahlen in einer Zeichenfolge einer bestimmten Länge mit Regex
- 30. Regex-Ausdruck zum Analysieren einer interessanten CSV?
Welches Werkzeug sind benutzen? Je nach Tool gibt es möglicherweise eine Möglichkeit, dies extern für Ihre Regex anzugeben. grep unterstützt zum Beispiel die Option -v, um den Sinn der Übereinstimmung zu invertieren. –
Kannst du nicht 'If (/^ABC $ /) else {...} wo die andere wäre die nicht passende ABC – Xetius
So suchen Sie nach jedem Zeichen einer gegebenen Zeichenfolge, mit Ausnahme der ABC-Teil davon ? Mit anderen Worten, "Ein String mit ABC" würde "A String mit" entsprechen. –