碼using System;using System.Text.RegularExpressions;namespace RegexNoMatch { class Program { static void Main () { string input = "a foobar& b"; string regex1 = "(foobar|foo)&?"; string regex2 = "(foo|foobar)&?"; string replace = "$1"; Console.WriteLine(Regex.Replace(input, regex1, replace)); Console.WriteLine(Regex.Replace(input, regex2, replace)); Console.ReadKey(); } }}預期產量a foobar ba foobar b實際產量a foobar ba foobar& b題當正則表達式模式中的“ foo”和“ foobar”的順序更改時,為什么替換不起作用?如何解決這個問題?
2 回答

吃雞游戲
TA貢獻1829條經驗 獲得超7個贊
正則表達式引擎嘗試按指定的順序匹配替代項。因此,當模式正確時,(foo|foobar)&?它將foo立即匹配并繼續嘗試查找匹配項。輸入字符串的下一位bar& b不能匹配。
換句話說,因為foo是的一部分foobar,所以(foo|foobar)永遠不會匹配foobar,因為它將始終foo首先匹配。
實際上,有時候這可能是一個非常有用的技巧。該模式(o|a|(\w))將允許您捕獲\w和a或以其他方式捕獲o:
Regex.Replace("a foobar& b", "(o|a|(\\w))", "$2") // fbr& b
- 2 回答
- 0 關注
- 727 瀏覽
添加回答
舉報
0/150
提交
取消