@matperez

Почему не работает регулярное выражение для поиска слов до и после выделяемого фрагмента?

Здравствуйте!

Нужно найти фрагмент текста из $quote + по пять слов справа и слева от него. Регулярка ловит слова, если буквы находятся внутри слов, но не ловит их на границах. Как ее поправить, что бы ловила везде?

$text = 'Здесь абсолютно комфортно вы можете генерировать тексты-«рыбы» для решения задач в области макетирования.';
$key = 'нер'; // это ловит
//     $key = 'ген'; // это не ловит, а надо бы
$quote = preg_quote($key);
$regex = '/(?:[^ ]+ ){0,5}[\p{L}\p{Nd}]+'.$quote.'[\p{L}\p{Nd}]+(?: [^ ]+){0,5}/iu';
if (preg_match_all($regex, $text, $matches)) {
      var_export($matches);
}


Вот тут пример с ней же https://regex101.com/r/lN3yE2/1
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что +, то есть в вашем выражении до и после $quote должны быть как минимум по одному алфавитно-цифровому символу. Замените на *, тогда будет работать. Ну и до кучи подумайте о вариантах, когда после искомого слова идёт знак препинания, табуляция или конец строки или же само слово является составным и содержит дефис.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы