[英]Regex.Replace has strange behavior at reluctant match
在回答這個問題時,我堅持這種情況。 在我的正則表達式中使用勉強匹配會帶來此結果
string s = Regex.Replace(".A.", "\\w*?", "B");
B.BAB.B
為什么不匹配並替換A?
因為\\\\w*?
盡可能匹配\\w
, 包括0 。
由於您使用的是\\w*
而不是\\w+
,因此正則表達式匹配0或多個\\w
。
既然您還有其他?
在\\w*
,此正則表達式的最小匹配項是長度為0的字符串''。
自從?
迫使正則表達式匹配盡可能小的匹配越好,它永遠只能匹配0長度的字符串。 它不能匹配單個字符A
因為匹配時間比最短字符更長。
因此, .A.
所有0長度字符串.A.
(即: ''.''A''.''
,其中每個可能的0長度字符串都標記為''
)替換為'B',從而得到'BAB'。
如果要禁用此行為並替換至少一個\\w
,則可以使用正則表達式\\w+?
。 但是,根據與以前相同的理由, ?
強制此選項只替換長度為\\w
的\\w
,因此您也可以使用regex \\w
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.