用于分析短术语的工作正则表达式错误


Wrong working regular expression for parsing short terms

我为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

如何获取完整缩写('г.','ж.р.','ул.')

您需要使用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] => ул.
        )
)