Руби регулярное выражение "содержит слово" - PullRequest
14 голосов
/ 19 марта 2012

В Ruby, как я могу написать регулярное выражение для проверки представления для отдельного слова?

Представьте, что у меня есть веб-форма, которая принимает текст.Я знаю, хочу ли я видеть, содержит ли предложение --only-- «объединение», я могу использовать

    if the_body == "join"

Но это работает, только если весь текст представляет «присоединиться».* Как мне поймать представление вроде этого:

"Я хочу вступить в ваш клуб?"или "Присоединяйся ко мне, пожалуйста"

Спасибо!

Ответы [ 3 ]

31 голосов
/ 19 марта 2012

Вы можете сделать это с помощью

string =~ /join/i

или

string.match(/join/i)

Небольшое обновление относительно комментария к производительности:

>> s = "i want to join your club"
>> n = 500000
=> 500000
>> Benchmark.bm do |x|
..     x.report { n.times { s.include? "join" } }
..   x.report { n.times { s =~ /join/ } }
..   end
       user     system      total        real
   0.190000   0.000000   0.190000 (  0.186184)
   0.130000   0.000000   0.130000 (  0.135985)

Хотя разница в скорости действительноне имеет значения, версия регулярного выражения была на самом деле быстрее.

6 голосов
/ 15 ноября 2014

Правильное решение, чтобы найти точное слово в строке:

the_body.match(/\bjoin\b/i) или использовать другое регулярное выражение:

(\W|^)join(\W|$)

Обратите внимание, нам нужно найтинезависимо от того, существует ли слово "join" в строке.Все вышеупомянутое решение не сработает для таких строк, как: they are joining canals или My friend Bonjoiny is a cool guy

0 голосов
/ 19 марта 2012

Здесь нет необходимости в регулярном выражении - String#include? выполнит эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...