Hat der reguläre Ausdruck von Ruby einen nicht übereinstimmenden Operator wie "! ~" In Perl?

91

Ich möchte nur wissen, ob Ruby Regex einen Nicht-Match-Operator wie !~in Perl hat. Ich halte es für unpraktisch (?!xxx)oder (?<!xxxx)weil Sie keine Regex-Muster in dem xxxTeil verwenden können.

user1793091
quelle
8
Alles was Sie tun mussten, war zu starten irbund es zu versuchen. Wäre wahrscheinlich schneller gewesen als eine SO-Frage zu stellen.
Mark Thomas
32
Aber nicht schneller als googeln 'Ruby Not Match' und diese Antwort auf SO zu finden;)
Micapam
3
Ich habe eine Weile experimentiert, bevor ich feststeckte, googelte und diese Antwort fand (was funktionierte). Lassen Sie sich niemals auf jemanden fallen, der eine Frage stellt.
Jonathon Nordquist
2
Er formulierte es nicht optimal. Ich denke, er wollte damit sagen: "Denken Sie daran, dass Sie es starten irbund ausprobieren können. Wahrscheinlich sogar schneller als das Posten einer SO-Frage und eine großartige Gelegenheit, die Dinge im Allgemeinen zu testen." So habe ich es jedenfalls gehört.
user2066657

Antworten:

155

Ja, !~funktioniert einwandfrei - Sie haben wahrscheinlich gedacht, dass dies nicht der Fall ist,Regexp da es auf der Dokumentationsseite von fehlt . Trotzdem funktioniert es:

irb(main):001:0> 'x' !~ /x/
=> false
irb(main):002:0> 'x' !~ /y/
=> true
Konrad Rudolph
quelle
8
!~ist unter Objekt dokumentiert .
Tonči D.
3
Mit Ruby 2.4 gibt es auch die etwas schönere Syntax RegExp#match?, die Sie leicht negieren können. Nach den Release Notes , tut es noch weniger Zuweisungen als!~
panmari
6

AFAIK (?! Xxx) wird unterstützt:

2.1.5 :021 > 'abc1234' =~ /^abc/
 => 0
2.1.5 :022 > 'def1234' =~ /^abc/
 => nil
2.1.5 :023 > 'abc1234' =~ /^(?!abc)/
 => nil
2.1.5 :024 > 'def1234' =~ /^(?!abc)/
 => 0
Kalbzhou
quelle
Es ist eine untergeordnete Lösung. Es ist nicht immer einfach, Regexps auf diese Weise zu konvertieren. Andererseits hängt diese Lösung nicht von der Programmiersprache der obersten Ebene ab;)
Konstantin