1

我有以下字符串:

$/Mycollection/Branches/Dev/New/php/MySite/src/MySite/somefolder/src/sad.php

我需要创建正则表达式模式并在“src”首次出现之前获取所有内容。

我试过这样使用,.+(src)但据我所知,我需要减少贪婪,有人可以帮忙吗?

4

3 回答 3

3

您可以使用正则表达式:(.*?)src并仅使用第一个捕获的组。

于 2012-03-12T20:21:59.133 回答
1

你很近。你可以这样做...

(^.+?)src

然后获取捕获的第一组的值。


您也可以通过其他方式执行此操作...

src.+

然后将匹配替换为"".

例如(在 C# 中)...

string value = Regex.Replace(yourstring, "src.+", "");

使用这种方法实际上效率更高。它将每秒进行大约 100 万次迭代,而第一种方法每秒进行 150,000 次迭代(至少在 .NET 中)。?这部分是因为使用捕获组有一些开销,部分是因为惰性量词发生的回溯。

顺便说一句,我使用Regex Hero进行了测试和基准测试,然后这是一篇很好的文章,涵盖了惰性?量词

于 2012-03-12T20:15:13.827 回答
0

在一些现代正则表达式实现中,.+?是小气的,即。在贪婪的量词之后添加一个问号以将其更改为吝啬。

于 2012-03-12T20:10:58.200 回答