正则表达式匹配返回意外结果

时间:2015-11-19 02:43:29

标签: php regex preg-match

我正在尝试正则表达式匹配,但结果却出乎意料。我做错了什么?

$text = "one two three?four five six?";
preg_match("~(.+?)(?:\?)?~", $text, $match);

print_r($match);

结果:

Array ( [0] => o [1] => o )

预期结果:

Array ( [0] => one two three? [1] => one two three )

1 个答案:

答案 0 :(得分:0)

您需要删除非捕获组旁边的?,这使得非捕获组成为可选组。由于?是可选的,(.+?)  非贪婪模式应匹配并仅捕获第一个字符。

preg_match("~(.+?)\?~", $text, $match);

DEMO