Я совсем новичок в регулярных выражениях. Не могли бы вы помочь мне создать шаблон, который соответствует целым словам, содержащим определенную часть? Например, если у меня есть текстовая строка «Выполнить сопоставление с регулярным выражением», и если я ищу экспресс, она должна дать мне выражение, если я ищу form, он должен дать мне Выполнить и так далее. Есть идея?
PHP preg_match для поиска целых слов
Ответы (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
Это отлично. Как раз то, что я искал... +1
- person OrPaz; 14.03.2012
\b Граница слов, мило... Почему я до сих пор этого не видел? Полезный.
- person Andrew; 17.12.2015
будьте осторожны, потому что + считается границей слова в регулярном выражении PHP!
- person Nadir; 03.10.2018
@Nadir Хочешь уточнить? В регулярном выражении
+
— это один или несколько символов. Снаружи действительно все, что не [a-z]
, считается границей слова. Но почему я должен остерегаться? Я не понимаю контекста.
- person Linus Kleen; 04.10.2018
вот более подробная информация: у меня была эта проблема со следующим кодом: 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