Как через регулярные выражения узнать, есть ли слово, а потом разобрать на составляющие?
Есть строчка такого типа:
"юр. пансионат солнышко 77"
его состав: юр. - название компании - регион.
Мне нужно узнать, содержит ли строчка слово "юр.", и если содержит - достать в две переменные: название компании и его регион. Я действую сейчас так:
$inMsg = "юр. пансионат солнышко 77";
$inMsgEx = explode(' ', $inMsg); // рублю на массив
if ($inMsgEx[0] == "юр.") { // проверяю первый элемент
$reqRegion = array_pop($inMsgEx); // достаю последний
array_shift($inMsgEx); // обрубаю начало
$reqName = implode(' ', $inMsgEx); // собираю в кучу
} // перфекционист плачет...
оно работает, но это костыль. мне не нравится эта дичь с разбором строки на массив, а потом сбором его обратно. помогите пожалуйста с регуляркой. мысль такая:
если (регулярное выражение на наличие "юр.") {
регулярное выражение, которое достаёт всё, что после "юр." в одну переменную,
а последнее число - в другую
}
Ответы (1 шт):
$str = 'юр. пансионат солнышко 77';
$re1 = '~^(юр\.)~iU';
if (preg_match($re1, $str, $matches, PREG_OFFSET_CAPTURE, 0)) {
$re23 = '~^(юр\.)([\S\s]+)([0-9]+$)~iU'; //выдираем между юр. и последни числом
//$re23 - шаг 2 и 3 в одном, потому и имя переменной такое
$subst = '$2';
$n_name = preg_replace($re23, $subst, $str, 1);
$n_name = trim($n_name);
echo "организац: " . $n_name;
$subst = '$3'; //регулярка та же, но тут посл число "выдираем"
$n_numb = preg_replace($re23, $subst, $str, 1);
echo "<br><br>номер: " . $n_numb;
}
Наверное меня заминусуют? Я давно с регекспами не работал
А вообще-то было бы правильней(?) доработать\переработать бд, чтобы чуток разделить (дэ\нормализовать или дэ\нормализировать) хранение данных. Хотя возможно вы именно этим и занимаетесь (или вам только для вывода нужно такое разбиение)?
Я проверил у себя, но гарантий на работу кода не могу дать. Вдруг в таблице будет нечто неожиданное.