我有以下字符串:
$/Mycollection/Branches/Dev/New/php/MySite/src/MySite/somefolder/src/sad.php
我需要创建正则表达式模式并在第一次出现“src”之前采取一切。
我试过像.+(src)
那样使用,但据我所知,我需要减少贪婪,任何人都可以帮忙吗?
答案 0 :(得分:3)
您可以使用this正则表达式:(.*?)src
并仅使用第一个捕获的组。
答案 1 :(得分:1)
你很亲密。你可以这样做......
(^.+?)src
然后获取捕获的第一组的值。
你也可以这样做......
src.+
然后将匹配替换为""
。
例如(在C#中)......
string value = Regex.Replace(yourstring, "src.+", "");
使用此方法实际上效率更高。对于第一种方法(至少在.NET中),它每秒将进行大约100万次迭代,而每秒进行150,000次迭代。这部分是因为使用捕获组会产生一些开销,部分原因是因为懒惰的?
量词会发生回溯。
顺便说一句,我使用Regex Hero然后here's a good article that covers the lazy ?
quantifier进行了测试和基准测试。
答案 2 :(得分:0)
在一些现代的正则表达式实现中,.+?
是吝啬的,即。在贪婪的量词后添加一个问号,将其改为吝啬。