PHP preg_match для поиска целых слов

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


person tintix    schedule 18.01.2011    source источник


Ответы (2)


preg_match('/\b(express\w+)\b/', $string, $matches); // matches expression
preg_match('/\b(\w*form\w*)\b/', $string, $matches); // matches perform,
                                                     // formation, unformatted

Где:

  • \b - это граница слова
  • \w+ – один или несколько символов "слова"*
  • \w* - это ноль или более символов "слово"

См. руководство по управляющим последовательностям для PCRE.


* Примечание: хотя на самом деле это не "словесный символ", символ подчеркивания _ также включен в класс символов \w.

person Linus Kleen    schedule 18.01.2011
comment
Это отлично. Как раз то, что я искал... +1 - person OrPaz; 14.03.2012
comment
\b Граница слов, мило... Почему я до сих пор этого не видел? Полезный. - person Andrew; 17.12.2015
comment
будьте осторожны, потому что + считается границей слова в регулярном выражении PHP! - person Nadir; 03.10.2018
comment
@Nadir Хочешь уточнить? В регулярном выражении + — это один или несколько символов. Снаружи действительно все, что не [a-z], считается границей слова. Но почему я должен остерегаться? Я не понимаю контекста. - person Linus Kleen; 04.10.2018
comment
вот более подробная информация: у меня была эта проблема со следующим кодом: preg_match_all(/#(\\w+)/, #a2+u2lis, $hashtags); - Мне нужно было обойти тот факт, что \w рассматривает + как границу слова: вы получаете 2 слова, а я просто хочу, чтобы в результате был a2+u2lis (контекст: это PHP 5.3) - person Nadir; 05.10.2018

Это соответствует «Выполнить»:

\b(\w*form\w*)\b

Это соответствует выражению:

\b(\w*express\w*)\b
person Kyle Wild    schedule 18.01.2011