正则表达式.匹配,开始和^(字符串的开始)

本文关键字:开始 字符串 匹配 正则表达式 | 更新日期: 2023-09-27 17:54:33

有人知道为什么这段代码的输出:

Regex re = new Regex("^bar", RegexOptions.Compiled);
string fooBarString = @"foo bar";
Match match1 = re.Match(fooBarString, 4);
Console.WriteLine(String.Format("Match 1 sucess: {0}", match1.Success));
Match match2 = re.Match(fooBarString.Substring(4));
Console.WriteLine(String.Format("Match 2 sucess: {0}", match2.Success));

:

匹配1成功:False

Match 2 success: True

?

预期行为当然是"正确的"。和";True"(否则我真的不知道"开始"是什么;参数应该是有用的

这个想法是,这个正则表达式匹配(有很多)被经常调用(每秒几千次),我们发现子字符串操作正在消耗内存性能。

谢谢你的帮助!

正则表达式.匹配,开始和^(字符串的开始)

根据MSDN

如果你想限制匹配它开始于一个特定的字符在字符串中的位置和正则表达式引擎不需要扫描字符串的剩余部分寻找a匹配,锚定正则表达式用G表示a从左到右的模式,或者在右边对于从右到左的模式)。这限制比赛,所以必须开始

regexp与整个字符串匹配,您需要使用'G而不是^

http://msdn.microsoft.com/en-us/library/3583dcyh.aspx

听起来你是对的-你对^的含义感到困惑。^表示您正在处理的行的最开始。^bar将只匹配以"bar"开头的行,这是您在Substring中人为完成的。如果你解释一下你想用它做什么,我们也许能帮助你。

顺便提一下,Substring应该比大多数regex操作明显快。如果这就是影响你表现的原因,我会很惊讶的。