Понимание функциональности границ слов в регулярных выражениях PHP
При попытке реализовать границы слов для сопоставления определенных слов в контенте с помощью регулярных выражений в PHP, важно понять их точное поведение. Однако во время тестирования могут возникнуть неожиданные результаты.
В приведенном примере выражение «^|\b@nimal/i» использовалось для соответствия слову «кот», только если оно встречается в начале другое слово. Однако результаты оказались противоречивыми, что привело к путанице в том, как PHP определяет границы слов.
Ключ к пониманию соответствия границ слов лежит в природе \b. Этот индикатор соответствует точке перехода между \w (символом слова) и \W (символом, не являющимся словом). Чтобы сопоставление было успешным, перед интересующим символом должен существовать словесный символ.
Рассмотрим первый пример:
preg_match("/(^|\b)@nimal/i", "something@nimal", $match);
Выражение соответствует границе слова между «g» и «@», поскольку «g» — это словесный символ, а «@» — это символ слова. символ, не являющийся словом.
Во втором примере:
preg_match("/(^|\b)@nimal/i", "something!@nimal", $match);
Соответствие не найдено, так как перед знаком "@" нет символа слова. Оба "!" и «@» не являются символами слова.
Чтобы устранить проблему, начните со слова перед символом, который вам нужен. Это гарантирует наличие допустимой границы слова.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3