@superhorsy

Почему не работает регулярка?

Добрый день,
Написала регулярку для поиска по тексту - она работает, но только если разнести каждое слово на отдельную строку. В чем может быть дело?

$re = '/(^[а-яё]+([a-z]+)[a-za-яё]*[ !?.,]?)|^([a-z]+)[а-яё]+[a-za-яё]*[ !?.,]*/m';
$str = 'Пocтaвкa мяco гoвядины, бecкостнoe для нужд государственного бюджетного учреждения здравоохранения Республики Башкортостан Инфекционная клиническая больница № 4 города Уфа ';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@dodo512
Вероятно, задача была найти слова, в которых смесь кириллицы и латиницы.
/(?|[а-яё]+([a-z]+)|[a-z]+([а-яё]+))[a-zа-яё]*/iu
https://regex101.com/r/lEX8iu/1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@superhorsy Автор вопроса
Ошибка - используется символ привязки к началу строки (^).
Правильно так:
$re = '/( ?([а-яёA-ЯЁ]+([a-z]+)[a-za-яё]*[ !?.,]?))| ?(([a-z]+)[а-яёA-ЯЁ]+[a-za-яё]*)[ !?.,]*/mi';
$str = 'Пocтaвкa мяco гoвядины, бecкостнoe для нужд государственного бюджетного учреждения здравоохранения Республики Башкортостан Инфекционная клиническая больница № 4 города Уфа ';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы