2015-07-04 2 views
1

Я написал некоторое регулярное выражение для PHP для разбора аббревиатуры от строки.Неправильное рабочее регулярное выражение для синтаксического анализа коротких терминов

Мой код:

$re = "/(([$]?+[А-Яа-я.]+[.]){1,})/"; 
$str = "г. Братск, ж.р. Южный Падун, ул. Мамырская, 62А, за остановкой"; 
preg_match_all($re, $str, $matches); 

И этот сценарий возвращения:

Array 
(
    [0] => Array 
     (
      [0] => г. 
      [1] => ж. 
      [2] => л. 
     ) 

    [1] => Array 
     (
      [0] => г. 
      [1] => ж. 
      [2] => л. 
     ) 

    [2] => Array 
     (
      [0] => г. 
      [1] => ж. 
      [2] => л. 
     ) 

) 

Но он будет работать так: [1]=>'ж.р.', [2]=>'ул.' Это означает, что мое регулярное выражение разбора часть аббревиатуры, хотя мне нужно чтобы получить полную аббревиатуру.

Например на regex101.com это довольно работы: https://regex101.com/r/wQ7lR7/1

Как я могу получить полную аббревиатуру ('г.','ж.р.','ул.')?

+0

Если ответ ниже работает для вас, пожалуйста, не забудьте пометить его как ответ. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – chris85

ответ

2

Вам необходимо использовать модификатор unicode, u, http://php.net/manual/en/reference.pcre.pattern.modifiers.php.

Пример:

$re = "/(([$]?+[А-Яа-я.]+[.]){1,})/u"; 
$str = "г. Братск, ж.р. Южный Падун, ул. Мамырская, 62А, за остановкой"; 
preg_match_all($re, $str, $matches); 
print_r($matches); 

Выход:

Array 
(
    [0] => Array 
     (
      [0] => г. 
      [1] => ж.р. 
      [2] => ул. 
     ) 

    [1] => Array 
     (
      [0] => г. 
      [1] => ж.р. 
      [2] => ул. 
     ) 

    [2] => Array 
     (
      [0] => г. 
      [1] => ж.р. 
      [2] => ул. 
     ) 

) 
Смежные вопросы