以以下字符串为例:“互联网上的营销和板球”。
我想找到所有可能匹配的"Ma“-any文本- "et”使用正则表达式。所以..。
互联网上的
regex Ma.*et
返回“市场营销和互联网上的板球”。regex Ma.*?et
返回市场。但是我想要一个能返回全部3的正则表达式。这有可能吗?
谢谢。
发布于 2010-11-03 21:08:09
据我所知:不。
但是,您可以首先匹配非贪婪的,然后生成一个新的regexp,并使用一个量词来获得第二个匹配。如下所示:
Ma.*?et
Ma.{3,}?et
...and等等..。
发布于 2010-11-03 21:32:52
谢谢各位,这真的很有帮助。下面是我为PHP提出的内容:
function preg_match_ubergreedy($regex,$text) {
for($i=0;$i<strlen($text);$i++) {
$exp = str_replace("*","{".$i."}",$regex);
preg_match($exp,$text,$matches);
if($matches[0]) {
$matched[] = $matches[0];
}
}
return $matched;
}
$text = "Marketing and Cricket on the Internet";
$matches = preg_match_ubergreedy("@Ma.*?et@is",$text);
发布于 2010-11-03 21:04:53
遗憾的是,这是不可能的标准POSIX正则表达式,它返回一个单一(最佳候选人,每个正则表达式)匹配。您将需要利用扩展特性,它可能存在于使用此正则表达式的特定编程语言中,前提是您在程序中使用它来完成此任务。
https://stackoverflow.com/questions/4091634
复制相似问题