我需要捕获"一"answers"四"之间的所有内容,"四"是可选的。我们不知道"一"answers"四"之间是什么。我试着匹配它,但没有得到正确的结果。我做错了什么?
$text = "one two three four five six seven eight nine ten";
preg_match("~one( .+)(four)?~i", $text, $match);
print_r($match);
结果:
Array ( [0] => one two three four five six seven eight nine ten [1] => two three four five six seven eight nine ten )
需要结果:
Array ( [0] => one two three four five six seven eight nine ten [1] => two three [3] => four)
附言:是的,"四个"必须是可选的。
这里需要使用交替运算符。
one(( .+)(four).*|.*)
演示
默认情况下,重复运算符(如"?"、"*"、"+"或{n,m})是贪婪的,它们会尽可能多地匹配符号。你可以在这里阅读更多关于懒惰和贪婪的内容:在正则表达式的上下文中,懒惰和贪婪是什么意思?
为了让他们不贪婪,在他们后面加上"?"。像这样:"~一(.+?)(四)?~i"