Wie Annulliere die Groovy-Match-Operator?
Den Dokumentation erwähnt drei regex-spezifische Operatoren:
~
Rückkehr einePattern
=~
seiner Rückkehr eineMatcher
==~
Rückkehr eineboolean
Nun, wie kann ich Annulliere den letzten? (Ich bin damit einverstanden, dass die anderen, kann keine sinnvolle negation.)
Habe ich versucht, das offensichtliche denken:
println 'ab' ==~ /^a.*/ //true: yay, matches, let's change the input
println 'bb' ==~ /^a.*/ //false: of course it doesn't match, let's negate the operator
println 'bb' !=~ /^a.*/ //true: yay, doesn't match, let change the input again
println 'ab' !=~ /^a.*/ //true: ... ???
Ich denke, die letzten beiden sollten interpretiert werden, wie dies eher:
println 'abc' != ~/^b.*/
wo kann ich sehen new String("abc") != new Pattern("^b.*")
wird true
.
- es ist über einen operator, der dies tut und
!(...)
ist keine option? - Ich weiß nicht, ob es ist ein "match" - operator, aber man kann immer negieren das Ergebnis wie dieses:
println !('abc' ==~ /^a.*/)
- Es wäre schön, wenn es war prägnant, aber wenn nicht, dann ist das eine offensichtliche Antwort ist 🙁 ich hatte mehr erwartet ich denke, wie Perl hat
!~
. - fiel in die gleiche Falle (wenn so es sein). Aber "!=~" können sollten nicht interpretiert werden als "äquivalent" zu "!= ~" ! ... weiße Raum ist in der Regel einer der wichtigsten Faktoren in der syntax Parsen, nur etwa jeder computer-Sprache! IMHO sollte es werfen kompilieren/scripting-Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK, es gibt keine negierende regular expression match-operator in Groovy.
Also - wie bereits erwähnt cfrick - es scheint, dass die beste Antwort ist, zu negieren der ganze Ausdruck:
Andere Lösung zum umkehren der reguläre Ausdruck, aber es scheint mir weniger lesbar:
Wie kann ich umkehren, einen regulären Ausdruck in JavaScript?