错误的正则表达式用于解析短期术语

时间:2015-07-04 03:19:18

标签: php regex

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

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

1 个答案:

答案 0 :(得分:2)

您需要使用unicode修饰符uhttp://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] => ул.
        )

)