Ich habe einen regulären Ausdruck, den ich negieren möchte, z. B.
%Vor%welche String.matches das folgende
zurückgibt %Vor%Gibt es eine Möglichkeit, das obige zu negieren (nur mit regx), so dass die Ergebnisse lauten:
%Vor%Ich suche nach einer allgemeinen Lösung, die für jeden regx funktioniert, ohne den gesamten Regex neu zu schreiben.
Ich habe mir folgendes angeschaut Wie negiere ich die ganze Regex? mit (?! Muster), aber das scheint nicht für mich zu arbeiten.
Das folgende regx
%Vor%gibt Folgendes zurück:
%Vor%was ich nicht will. Jede Hilfe wäre willkommen.
Sie müssen Anker hinzufügen. Die ursprüngliche Regex (abzüglich der unnötigen Klammern):
%Vor% ... entspricht einer Zeichenfolge, die enthält , gefolgt von null bis vier weiteren Zeichen. Da Sie die Methode matches()
verwenden, wird sie automatisch verankert, als wäre sie wirklich:
Um das Umgekehrte zu erreichen, können Sie sich nicht auf die automatische Verankerung verlassen; Sie müssen mindestens den Endanker im Lookahead explizit machen. Außerdem müssen Sie die Regex mit einem .*
"auffüllen", da matches()
erfordert, dass die Regex die gesamte Zeichenfolge konsumiert:
Aber ich empfehle, dass Sie den gesamten Regex explizit verankern, so:
%Vor% Es schadet nicht, und es macht Ihre Absicht vollkommen klar, besonders für Leute, die Regexes aus anderen Geschmacksrichtungen wie Perl oder JavaScript gelernt haben. Die automatische Verankerung der Methode matches()
ist sehr ungewöhnlich.
Tags und Links java regex regex-negation