Regex - выходящие квадратные скобки вместе с границей - PullRequest
1 голос
/ 15 апреля 2020

У меня есть веб-сайт, на котором пользователи могут выполнять пользовательские действия при обнаружении ключевого слова в предложении. То, как я в настоящее время делаю совпадения, выглядит следующим образом:

$output = array();
preg_match('/\b' . $keyword . '\b/', $phrase, $output);

Если я нахожу совпадение if(count($output) > 0) {, то выполняется пользовательское действие. Это для устных предложений, поэтому для таких вещей, как оператор, у нас есть специальное предложение, называемое [silence], поэтому при обнаружении молчания выполняется действие.

Однако, когда ключевое слово содержит квадратные скобки, например: [silence] регулярное выражение не выполняется, потому что оно имеет квадратные скобки. Я пытался избежать обоих, как \b\[silence\]\b Однако это не обнаруживает совпадение.

Также это в PHP

Заранее спасибо, Джо

1 Ответ

2 голосов
/ 15 апреля 2020

Выражение «граница слова» соответствует, если следующий символ является частью слова, а [ не является (это не буква)

С Руководство по регулярным выражениям :

Существуют три различные позиции, которые квалифицируются как границы слов:

  • Перед первым символом в строке, если первый символ является символом слова.
  • После последнего символа в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой - не символом слова.

Проще говоря: \ b позволяет выполнять поиск «только целых слов» с использованием регулярного выражения в форме \ bword \ b. «Символ слова» - это символ, который можно использовать для формирования слов. Все символы, которые не являются «символами слова», являются «несловными символами».

Таким образом, вам нужно «переписать» выражение \b, которое соответствует вашим потребностям, например:

(?<=[\s\.,;])\[silence\](?=[\s\.,;])

Во-первых, несоответствующий «символ-разделитель» (пробел, точка, запятая, ... Вам, вероятно, нужно добавить еще несколько), за которым следует ваше выражение, а затем снова несоответствующий символ-разделитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...