我有以下字符串:
$/Mycollection/Branches/Dev/New/php/MySite/src/MySite/somefolder/src/sad.php
我需要创建正则表达式模式并在“src”首次出现之前获取所有内容。
我试过这样使用,.+(src)
但据我所知,我需要减少贪婪,有人可以帮忙吗?
您可以使用此正则表达式:(.*?)src
并仅使用第一个捕获的组。
你很近。你可以这样做...
(^.+?)src
然后获取捕获的第一组的值。
您也可以通过其他方式执行此操作...
src.+
然后将匹配替换为""
.
例如(在 C# 中)...
string value = Regex.Replace(yourstring, "src.+", "");
使用这种方法实际上效率更高。它将每秒进行大约 100 万次迭代,而第一种方法每秒进行 150,000 次迭代(至少在 .NET 中)。?
这部分是因为使用捕获组有一些开销,部分是因为惰性量词发生的回溯。
顺便说一句,我使用Regex Hero进行了测试和基准测试,然后这是一篇很好的文章,涵盖了惰性?
量词。
在一些现代正则表达式实现中,.+?
是小气的,即。在贪婪的量词之后添加一个问号以将其更改为吝啬。