Строка соответствия, которая не содержит определенного слова
Я работаю с ruby с помощью метода match
, и я хочу сопоставить URL-адрес, который не содержит определенную строку с регулярным выражением:
например:
http://website1.com/url_with_some_words.html
http://website2.com/url_with_some_other_words.html
http://website3.com/url_with_the_word_dog.html
Я хочу сопоставить URL-адреса, которые не содержат слова dog
, поэтому 1-й и 2-й должны быть сопоставлены
Ответы
Ответ 1
Просто используйте отрицательный lookahead ^(?!.*dog).*$
.
Объяснение
-
^
: совпадение начала строки
-
(?!.*dog)
: отрицательный просмотр, проверьте, не существует ли слово "собака"
-
.*
: сопоставить все (кроме строк в этом случае)
-
$
: совпадение конца строки
Демо-версия онлайн
Ответ 2
Просто используйте
string !~ /dog/
чтобы выбрать нужные вам строки.
Ответ 3
На самом деле это невероятно простой способ сделать это, используя select.
array_of_urls.select { |url| !url.match(/dog/) }
это вернет массив URL-адреса, который не содержит слова "собака" в любом месте.
Ответ 4
Еще одна вещь, которую вы можете использовать:
!url['dog']
В вашем примере:
array = []
array << 'http://website1.com/url_with_some_words.html'
array << 'http://website2.com/url_with_some_other_words.html'
array << 'http://website3.com/url_with_the_word_dog.html'
array.select { |url| !url['dog'] }
Вы также можете отклонить URL-адреса, которые содержат 'dog'
:
array.reject { |url| url['dog'] }