Как через регулярные выражения узнать, есть ли слово, а потом разобрать на составляющие?

Есть строчка такого типа:

"юр. пансионат солнышко 77"

его состав: юр. - название компании - регион.

Мне нужно узнать, содержит ли строчка слово "юр.", и если содержит - достать в две переменные: название компании и его регион. Я действую сейчас так:

$inMsg = "юр. пансионат солнышко 77";
$inMsgEx = explode(' ', $inMsg); // рублю на массив
  if ($inMsgEx[0] == "юр.") { // проверяю первый элемент
    $reqRegion = array_pop($inMsgEx); // достаю последний
    array_shift($inMsgEx); // обрубаю начало
    $reqName = implode(' ', $inMsgEx); // собираю в кучу
  } // перфекционист плачет...

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

если (регулярное выражение на наличие "юр.") {
регулярное выражение, которое достаёт всё, что после "юр." в одну переменную, 
а последнее число - в другую
}

Ответы (1 шт):

Автор решения: Aliskin
$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;
}

Наверное меня заминусуют? Я давно с регекспами не работал


А вообще-то было бы правильней(?) доработать\переработать бд, чтобы чуток разделить (дэ\нормализовать или дэ\нормализировать) хранение данных. Хотя возможно вы именно этим и занимаетесь (или вам только для вывода нужно такое разбиение)?


Я проверил у себя, но гарантий на работу кода не могу дать. Вдруг в таблице будет нечто неожиданное.

→ Ссылка