使用正则表达式与非贪婪模式的第二个

3

我有一个正则表达式,它匹配一个字符串并使用非贪婪语法,因此它会在第一个结束匹配处停止。我需要它在第二个结束匹配处停止。我该怎么做?

$text = "start text1 end text2 end text3 end";
$regex = "~start.+?end~";
preg_match($regex, $text, $match);
print_r($match);

Result:

start text1 end

Need Result

start text1 end text2 end

2
你可以使用 start.+?end.+?end 的正则表达式。你可能还想要边界匹配 end,这样 sendmend 等就不会被匹配到了。 - chris85
1个回答

0

以下代码应该可以正常工作,你只需要再次重复你想要的表达式序列即可。有几种方法可以实现。最简单的方法是:

$text = "start text1 end text2 end text3 end";
$regex = "~start.+?end.+?end~";
preg_match($regex, $text, $match);
print_r($match);

你可能还想使用一个准确的量词来描述这个模式:
$text = "start text1 end text2 end text3 end";
$regex = "~start(.+?end){2}~";
preg_match($regex, $text, $match);
print_r($match);

"{2}"表示精确匹配括号内的所有内容两次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接