Подтвердить что ты не робот

Строка соответствия, которая не содержит определенного слова

Я работаю с 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-й должны быть сопоставлены

4b9b3361

Ответ 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'] }