Регулярное выражение для строки содержит?

114

Что такое регулярное выражение для простой проверки наличия в строке определенного слова (например, «Тест»)? Я немного погуглил, но не могу получить прямой пример такого регулярного выражения. Это для сценария сборки, но не имеет отношения к какому-либо конкретному языку программирования.

GurdeepS
источник

Ответы:

79

Предполагая, что обычные регулярные выражения в стиле PCRE:

Если вы хотите проверить его как одно полное слово , оно должно иметь \bTest\bсоответствующие флаги нечувствительности к регистру, если это необходимо, и разделители для вашего языка программирования. \bпредставляет собой «границу слова», то есть точку между символами, где слово может считаться началом или концом. Например, поскольку для разделения слов используются пробелы, по обе стороны от пробела будет граница слова.

Если вы хотите проверить это как часть слова , это просто Test, опять же с соответствующими флагами нечувствительности к регистру. Обратите внимание, что обычно выделенные методы «подстроки» в этом случае обычно работают быстрее, потому что они устраняют накладные расходы на синтаксический анализ регулярного выражения.

Майкл Мэдсен
источник
1
« \bпредставляет собой« границу слова », то есть то, что разделяет два слова (например, пробел)». \bне соответствует пробелу; это утверждение, которое совпадает между символами (или в большинстве случаев в начале или в конце строки).
Strager
1
@strager: Да, ты прав - мое объяснение было немного неточным. Я отредактирую.
Майкл Мэдсен
117

Только не привязывайте свой паттерн:

/Test/

Вышеупомянутое регулярное выражение проверяет наличие литеральной строки "Test" где-нибудь внутри него.

Платиновая лазурь
источник
2
Спасибо, я не знал, что это так просто! Я определенно не видел этого в моем поиске в Google. Что вы имеете в виду, говоря "не закреплять мой шаблон"?
GurdeepS
7
Вы можете привязать шаблон для сопоставления с началом или концом строки, например / ^ Test / или / Test $ / соответственно, или даже / ^ Test $ / для точного совпадения. Пример бессмысленен, потому что он не дает преимущества перед сравнением на равенство, но, например, при проверке поля формы регулярное выражение, такое как / ^ \ d + $ /, будет соответствовать только в том случае, если поле содержит хотя бы одну цифру и ничего, кроме числовых цифр.
Дэвид Кларк
-13

Я опоздал на несколько лет, но почему не это?

[Tt][Ee][Ss][Tt]
user2747691
источник
4
Этот ответ оказался в очереди на проверку низкого качества, предположительно из-за того, что вы не объяснили код. Если вы все же объясните это (в своем ответе), у вас гораздо больше шансов получить больше голосов - и спрашивающий действительно что-то узнает!
Парень в шляпе
6
Это не очень обобщенно - представьте, если бы слово, которое вы искали, пришло от пользователя. Вам нужно будет создать [Aa]шаблон для каждой буквы, и довольно быстро он станет довольно уродливым.
Platinum Azure