我需要一种C#字符串搜索算法,可以匹配多个模式的出现。例如,如果模式是“AA”,字符串是“BAAABBB”,则正则表达式会产生匹配结果Index = 1,但我需要结果Index = 1,2。我能强制正则表达式给出这样的结果吗?
我需要一种C#字符串搜索算法,可以匹配多个模式的出现。例如,如果模式是“AA”,字符串是“BAAABBB”,则正则表达式会产生匹配结果Index = 1,但我需要结果Index = 1,2。我能强制正则表达式给出这样的结果吗?
使用向前查找模式:
"A(?=A)"
这会找到任何后面跟随着另一个A的A,而不会消耗紧随其后的A。因此AAA将会匹配这个模式两次。
总结之前所有的评论:
Dim rx As Regex = New Regex("(?=AA)")
Dim mc As MatchCollection = rx.Matches("BAAABBB")
Regex rx = new Regex("(?=AA)");
MatchCollection mc = rx.Matches("BAAABBB");
你真的在寻找只有两个字符长的子字符串吗?如果是这样,在一个2000万字符的字符串中进行搜索无论使用什么正则表达式(或任何非正则表达式技术)都会很慢。如果搜索字符串更长,正则表达式引擎可以采用像Boyer-Moore或Knuth-Morris-Pratt这样的搜索算法来加速搜索——事实上,字符串越长,效果越好。
顺便说一下,你所谈论的搜索类型称为重叠匹配;我会将其添加到标签中。
试试这个:
System.Text.RegularExpressions.MatchCollection matchCol;
System.Text.RegularExpressions.Regex regX = new System.Text.RegularExpressions.Regex("(?=AA)");
string index="",str="BAAABBB";
matchCol = regX.Matches(str);
foreach (System.Text.RegularExpressions.Match mat in matchCol)
{
index = index + mat.Index + ",";
}
索引的内容是您要查找的内容,最后一个逗号已被删除。