Czy wyrażenie regularne Rubiego ma w Perlu operator niedopasowania, taki jak „! ~”?


92

Chcę tylko wiedzieć, czy wyrażenie regularne ruby ​​ma operator dopasowania, tak jak !~w perlu. Uważam, że jest to niewygodne w użyciu (?!xxx)lub (?<!xxxx)ponieważ w części nie można używać wzorców wyrażeń regularnych xxx.


8
Wszystko, co musiałeś zrobić, to odpalić irbi spróbować. Prawdopodobnie byłby szybszy niż wysłanie pytania SO.
Mark Thomas,

33
Ale nie szybciej niż
wygooglowanie ``

3
Eksperymentowałem przez chwilę, zanim utknąłem, przeszukałem go i znalazłem tę odpowiedź (która zadziałała). Nigdy nie rzucaj się na kogoś za zadanie pytania.
Jonathon Nordquist

2
Sformułował to nieoptymalnie. Myślę, że miał na myśli to, że „pamiętaj, że możesz odpalić irbi spróbować. Prawdopodobnie nawet szybciej niż wysłanie pytania SO i świetna okazja do przetestowania wszystkiego w ogóle”. To jak ja usłyszałem to, w każdym razie.
user2066657

Odpowiedzi:



6

AFAIK (?! Xxx) jest obsługiwany:

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

To rozwiązanie niższego poziomu. Konwersja wyrażeń regularnych w ten sposób nie zawsze jest łatwa. Z drugiej strony to rozwiązanie nie zależy od języka programowania najwyższego poziomu;)
Konstantin

0

W perlu 'foobar' !~ /bar/doskonale było sprawdzić, czy łańcuch nie zawiera znaku „bar”.

W Rubim, szczególnie w przypadku przewodnika po nowoczesnym stylu, myślę, że bardziej jednoznaczne rozwiązanie jest bardziej konwencjonalne i łatwe do zrozumienia:

input = 'foobar'

do_something unless input.match?(/bar/) 

needs_bar = !input.match?(/bar/)

To powiedziawszy, myślę, że byłoby fajnie, gdyby istniała .no_match?metoda.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.