PHP正则表达式值

时间:2016-06-17 18:14:34

标签: php

My Regexp:

/^(\p{L}+)(?:\.(\p{L}+))*$/

和主题:

app.config.db

返回匹配appdb。为什么这个脚本会省略config

2 个答案:

答案 0 :(得分:2)

由于这一部分:

(?:\.(\p{L}+))*

您正在重复捕获组,该捕获组只捕获最后捕获。您可能希望查看preg_match_all(),其中(使用不同的正则表达式)将能够返回所有匹配项。

示例:

$input = 'app.config.db';
$regex = '/\.?(\p{L}+)/';

preg_match_all($regex, $input, $matches);
print_r($matches[1]);

输出:

Array
    (
        [0] => app
        [1] => config
        [2] => db
    )

答案 1 :(得分:1)

你的正则表达式包含两个捕获组,因此它将捕获两个字符串。第一组(^(\p{L}+))会捕获app,因为它位于字符串的开头。

第二组最初捕获config。但它嵌套在*内,因此重复并捕获db。通常,结果将是任何组捕获的 last 字符串。