My Regexp:
/^(\p{L}+)(?:\.(\p{L}+))*$/
和主题:
app.config.db
返回匹配app
和db
。为什么这个脚本会省略config
?
答案 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 字符串。