2011-02-02 9 views
7

Wiem, że w Regeksie możesz odrzucić listy symboli, takie jak [^abc]. Chciałbym odrzucić, widząc całe słowo w środku mojego wpisu.Ruby Regex: Odrzucanie całych słów

Mówiąc dokładniej, chciałbym odrzucić "print < Wszystko poza" wszystkimi ">". Kilka przykładów:

print all - match 
frokenfooster - no match 
print all nomnom - no match 
print bollocks - no match 
print allpies - no match 
+0

Mam wrażenie, że "chciałbym dopasować", a przykłady, które podałeś, są sprzeczne? –

+0

Ach, tak, było. Moja wina. – Mike

Odpowiedz

11

szukasz w negative look-ahead. (ref.using look-ahead and look-behind)

(?!exclude) 

wykluczających słowo "wykluczenie" w strukturze.

+0

Idealny. Dziękuję Ci. – Mike

+0

@Mike: p.s. Myślę, że szukasz '^ print ((?! All all). *) $' ;-) –

+0

Nieodebrane kotwice. Zdaje się, że teraz jest odporna na pociski. :) – Mike

2

Wyrażenia regularne obsługują podział słów \b.

Poszukiwanie istnienia słowa „wszystko” w ciąg jest tak proste, jak:

>> 'the word "all"'[/\ball\b/] #=> "all" 
>> 'the word "ball"'[/\ball\b/] #=> nil 
>> 'all of the words'[/\ball\b/] #=> "all" 
>> 'we had a ball'[/\ball\b/] #=> nil 
>> 'not ball but all'[/\ball\b/] #=> "all" 

Uwaga, to nie ma zakotwiczenie go do początku lub na końcu łańcucha, ponieważ \b rozpoznaje początek i koniec ciągu jako granice słów.

+0

Nie wiedziałem o tym - to naprawdę przydatne. – Mike