首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找到所有匹配的正则表达式-贪婪和非贪婪!

找到所有匹配的正则表达式-贪婪和非贪婪!
EN

Stack Overflow用户
提问于 2010-11-03 21:00:22
回答 4查看 404关注 0票数 4

以以下字符串为例:“互联网上的营销和板球”。

我想找到所有可能匹配的"Ma“-any文本- "et”使用正则表达式。所以..。

互联网上的

  • Market
  • Marketing、Cricket
  • Marketing和Cricket

regex Ma.*et返回“市场营销和互联网上的板球”。regex Ma.*?et返回市场。但是我想要一个能返回全部3的正则表达式。这有可能吗?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-03 21:08:09

据我所知:不。

但是,您可以首先匹配非贪婪的,然后生成一个新的regexp,并使用一个量词来获得第二个匹配。如下所示:

代码语言:javascript
运行
复制
Ma.*?et
Ma.{3,}?et

...and等等..。

票数 2
EN

Stack Overflow用户

发布于 2010-11-03 21:32:52

谢谢各位,这真的很有帮助。下面是我为PHP提出的内容:

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2010-11-03 21:04:53

遗憾的是,这是不可能的标准POSIX正则表达式,它返回一个单一(最佳候选人,每个正则表达式)匹配。您将需要利用扩展特性,它可能存在于使用此正则表达式的特定编程语言中,前提是您在程序中使用它来完成此任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4091634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档