我有以下代码:
var pattern = @"(?:red).*(\d+)";
var regX = new Regex(pattern);
var input = "this is red with number 111";
var replaced = regX.Replace(input, "666");
然后replaced
:this is 666
代替:this is red with number 666
为什么会这样?
答案 0 :(得分:7)
由于正则表达式的(?:red).*
部分与字符匹配,因此您需要使用基于正向lookbehind断言的正则表达式。所以在更换时,所有匹配的字符都被替换了。
var pattern = @"(?<=red.*?)\d+";
var regX = new Regex(pattern);
var input = "this is red with number 111";
var replaced = regX.Replace(input, "666");
或
使用捕获组。
var pattern = @"(red.*?)\d+";
将匹配的字符替换为$1
或\1
+ 666
答案 1 :(得分:1)
您的正则表达式未按预期工作,因为它与getinfo.php
匹配。如果你不想匹配数字之前的文本,你可以使用.NET正则表达式中非常棒的变量look-behind:
echo " <td rowspan='10'>
<div>
<div id='chart-e1'>
<canvas id='canvas-e1' ></canvas>
</div>
</div>
</td>";
代码:
red with number 111
输出:
修改:
如果要使用捕获组替换,可以使用:
(?<=\bred.*)\d+
替换字符串var pattern = @"(?<=\bred.*)\d+";
var regX = new Regex(pattern);
var input = "this is red with number 111";
var replaced = regX.Replace(input,"666");
中的花括号将确保引擎将其作为组号消除歧义,而不是替换中的数字的一部分。