簡體   English   中英

正則表達式。替換在勉強匹配時有奇怪的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM