在回答这个问题时,C#Regex Replace和*提出了问题存在的原因.在播放时我制作了以下代码:
string s = Regex.Replace(".A.", "\w*", "B");
Console.Write(s);
Run Code Online (Sandbox Code Playgroud)
这有输出: B.BB.B
我得到0长度字符串在.字符之前和之后匹配,但为什么A被2个B替换.
我可以理解B.BBB.B为替换任意一侧的零长度字符串A或B.B.B
但实际结果让我感到困惑 - 任何帮助表示赞赏.
或者正如AakashM所说:
为什么Regex.Matches("A", "\w*").Count等于2,不是1或3?
Ale*_*aga 12
\ w之后有一颗星
它意味着" 零或多",这意味着:
表达\w{0,}将具有相同的效果.
如果你想避免它,请使用'plus',意思是'至少一个': \w+
因为 \w* 是一个贪婪的正则表达式,它试图找到最大的序列。因此它"nothing"在点之前匹配,然后"nothing"A在两个点之间匹配,然后"nothing"在第二个点之前匹配,最后"nothing"在第二个点之后匹配。