L'espressione regolare di Ruby ha un operatore di non corrispondenza come "! ~" In Perl?


92

Voglio solo sapere se ruby ​​regex ha un operatore di non corrispondenza proprio come !~in perl. Penso che sia scomodo da usare (?!xxx)o (?<!xxxx)perché non puoi usare schemi regex nella xxxparte.


8
Tutto quello che dovevi fare era accendere irbe provare. Probabilmente sarebbe stato più veloce che pubblicare una domanda SO.
Mark Thomas

33
Ma non più veloce di cercare su
Google

3
Ho sperimentato per un po 'prima di rimanere bloccato, cercare su Google e trovare questa risposta (che ha funzionato). Non scaricare mai qualcuno per aver fatto una domanda.
Jonathon Nordquist

2
L'ha formulato in modo sub-ottimale. Quello che penso volesse dire era: "ricorda che puoi accenderlo irbe provarlo. Probabilmente anche più velocemente di postare una domanda SO, e una grande opportunità per testare le cose in generale". È così che l' ho sentito, comunque.
user2066657

Risposte:



6

AFAIK (?! Xxx) è supportato:

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

È una soluzione di livello inferiore. Non è sempre facile convertire le espressioni regolari in questo modo. D'altra parte, questa soluzione non dipende dal linguaggio di programmazione di primo livello;)
Konstantin

0

Tornando in perl, 'foobar' !~ /bar/era perfettamente perlish per verificare che la stringa non contenga "bar".

In Ruby, in particolare con una guida di stile moderna, penso che una soluzione più esplicita sia più convenzionale e facile da capire:

input = 'foobar'

do_something unless input.match?(/bar/) 

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

Detto questo, penso che sarebbe interessante se ci fosse un .no_match?metodo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.