gpt4 book ai didi

c# - Regex.Match、startat 和 ^(字符串开始)

转载 作者:IT王子 更新时间:2023-10-29 04:44:10 27 4
gpt4 key购买 nike

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

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));

是:

Match 1 sucess: False

Match 2 sucess: True

?

预期的行为当然是“True”和“True”(否则我真的不知道“startat”参数应该有什么用)。

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

感谢您的帮助!

最佳答案

根据MSDN

If you want to restrict a match so that it begins at a particular character position in the string and the regular expression engine does not scan the remainder of the string for a match, anchor the regular expression with a \G (at the left for a left-to-right pattern, or at the right for a right-to-left pattern). This restricts the match so it must start exactly at startat.

正则表达式与整个字符串匹配,您需要使用\G 而不是 ^

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

关于c# - Regex.Match、startat 和 ^(字符串开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5884922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com