Ruby düzenli ifadesinin Perl'de "! ~" Gibi eşleşmeyen bir operatörü var mı?


95

Sadece Ruby regex'in perl'deki gibi eşleşmeyen bir operatörü olup olmadığını bilmek istiyorum !~. Parçada normal ifade kalıplarını kullanamayacağınız (?!xxx)veya kullanmanın uygun olmadığını düşünüyorum .(?<!xxxx)xxx


8
Tek yapman gereken ateş irbedip denemekti. Muhtemelen bir SO sorusu göndermekten daha hızlı olurdu.
Mark Thomas

33
Ama googling 'yakut eşleşmiyor' ve
SO'da

3
Takılıp kalmadan, Google'da dolaşmadan ve bu cevabı bulmadan önce bir süre deney yaptım (işe yaradı.). Asla birisinin soru sorduğu için yüz çevirmeyin.
Jonathon Nordquist

2
Alt-optimal bir şekilde ifade etti. Söylemek istediğini düşündüğüm şey, "ateş irbedip deneyebileceğini unutma . Muhtemelen bir SO sorusu göndermekten daha hızlı ve her şeyi genel olarak test etmek için harika bir fırsat." İşte böyle ben zaten duymuştum.
user2066657

Yanıtlar:



7

AFAIK (?! Xxx) desteklenir:

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

Daha düşük seviyeli bir çözüm. Normal ifadeleri bu şekilde dönüştürmek her zaman kolay değildir. Öte yandan, bu çözüm üst düzey programlama diline bağlı değildir;)
Konstantin

0

Perl'e geri dön, 'foobar' !~ /bar/Perl'e döndüğümüzde, dizenin "bar" içermediğini test etmek mükemmel bir şekilde başarıldı.

Ruby'de, özellikle modern bir stil kılavuzu ile, daha açık bir çözümün daha geleneksel ve anlaşılması daha kolay olduğunu düşünüyorum:

input = 'foobar'

do_something unless input.match?(/bar/) 

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

Bununla birlikte, bir .no_match?yöntem olsaydı çok şık olacağını düşünüyorum .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.