如何在带有正则表达式的字符串中第n次出现搜索值?

时间:2011-08-18 03:00:58

标签: regex

例如,string是“staaaae”,如果searchValue是“aa”,n = 2,则返回3。

1 个答案:

答案 0 :(得分:0)

这不是正则表达式本身的功能,但根据您的语言,您可以获取此信息。

有一件事我必须纠正你。第二场比赛的起始索引是 4 而不是3(标准正则表达式匹配行为)

staaaae
  ^^  first match
    ^^   second match

模式在第一场比赛后继续搜索,因此比赛不会重叠。

<强>的Perl

以Perl为例,没问题。

  

除了匹配的内容外,Perl(自5.6.0起)也提供了   匹配为@ - 和@ +数组内容的位置。   $ - [0]是整场比赛开始的位置,$ + [0]是   结束的位置。同样,$ - [n]是开头的位置   $ n匹配和$ + [n]是结束的位置。如果$ n是   未定义,所以是$ - [n]和$ + [n]。

引自Perlretut

所以在Perl中,您想要的信息将在$-[n]

<强> C#/。净

在.net中也没问题。只比Perl多一点努力。

Match还会返回匹配的索引,但它一次只匹配一个,因此您必须通过循环才能获得所有匹配。

string input = "staaaae";
string pattern = @"aa";
Match match = Regex.Match(input, pattern);
int count = 0;

while (match.Success)
{
    count++;
    Console.WriteLine("'{0}' was found the {1} timein the source code at position {2}.",
    match.Value, count, match.Index);
    match = match.NextMatch();
}
Console.ReadLine();