Я довольно плохо знаком с использованием регулярных выражений и застрял в проблеме, которую пытаюсь решить. У меня проблемы с пониманием того, что происходит, и я надеюсь, что кто-то может намекнуть мне в правильном направлении.
Чего я пытаюсь достичь:
Чтобы избежать дублирования в вид, я хочу проверить, если имя атрибута содержит соответствующий блок атрибута. Например, если $attribute['name'] = "Cutting speed (in m/Min.)"
и attribute['unit'] = "m/min"
, то атрибутная единица не должна отображаться, поскольку она уже упоминается в названии.
Как я пытаюсь добиться этого:
Я проверяю единицу атрибута, используя следующее регулярное выражение: ~\b' . attribute['unit'] . '\b~i'
Это хорошо работает в вышеупомянутом примере, но не так хорошо, если единица является специальным символом, таким как %
или "
, например.
Проблемы
При тестировании на выпуск специальных символов я столкнулся со следующим явлением:
, если я использую это регулярное выражение /\b%\b/
он ведет себя не так, как ожидалось, и соответствует %
в bla%bla
, но не %
, если перед ним стоит пробел: https://regex101.com/r/56iYEI/3
Похоже, % превращает поведение регулярного выражения в противоположность. Я также проверял другие «специальные символы» («и &), и они, похоже, имеют тот же эффект.
Я был направлен на этот вопрос ( Граница и специальные символы регулярного выражения» * 1038) *) прежде и прочитайте ответы. Теперь я понимаю, что \b
проверяет границы слов. Но мне все еще неясно, почему он ведет себя так, как он, как только появляется %
или "
.
Вопросы
- Почему
%
поворачивает эту проверку границ слов на \b
вокруг? - Как мне достичь моего Цель матча для алфавитных единиц c, а также для специальных символов, таких как
%
или "
?
Ждем любых подсказок. Заранее спасибо!