回答this问题我坚持这种情况。在我的正则表达式中使用不情愿的匹配会带来这个结果
string s = Regex.Replace(".A.", "\\w*?", "B");
B.BAB.B
为什么它不匹配并替换A?
答案 0 :(得分:5)
因为\\w*?
匹配尽可能少\w
,包括0 。
由于您有\w*
而不是\w+
,因此正则表达式匹配0或更多\w
。
由于?
上有一个额外的\w*
,此正则表达式的最小可能匹配是0长度字符串''。
由于?
强制正则表达式匹配尽可能小的匹配,因此只有永远匹配0长度的字符串。它不能匹配单个字符A
,因为这将是一个比最短的匹配更长的匹配。
因此,.A.
中的所有0长度字符串(为:''.''A''.''
,其中每个可能的0长度字符串标记为''
)被替换为'B',为您提供'BAB'。
如果要禁用此行为并替换至少一个\w
,则可以使用正则表达式\w+?
。但是,通过与以前相同的推理,?
强制它只能替换长度为1的\w
,因此您也可以使用正则表达式\w
。