【发布时间】:2014-01-24 14:04:39
【问题描述】:
以下代码...
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var r = new Regex("(.*)");
var c = "XYZ";
var uc = r.Replace(c, "A $1 B");
Console.WriteLine(uc);
}
}
产生以下输出...
A XYZ BA B
你认为这是正确的吗?
输出不应该是……
A XYZ B
我想我在这里做了一些愚蠢的事情。如果您能提供任何帮助帮助我理解这个问题,我将不胜感激。
这里有一些有趣的东西......
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var r = new Regex("(.*)");
var c = "XYZ";
var uc = r.Replace(c, "$1");
Console.WriteLine(uc);
}
}
输出...
XYZ
【问题讨论】:
-
你的正则表达式有两个匹配项,
Replace将替换它们。第一个是“XYZ”,第二个是空字符串。我不确定的是为什么它首先有两场比赛。您可以使用^(.*)$对其进行修复,以强制它考虑字符串的开头和结尾。 -
如果你的模式匹配一个没有进一步限制的空字符串,你总是会在一个字符串的末尾得到一个额外的匹配。
-
请参阅stackoverflow.com/questions/16103346/… 以了解字符串解释末尾的额外匹配
-
@w0lf:可能因正则表达式引擎而异。 Ruby 的引擎似乎以同样的方式解释它(参见匹配:rubular.com/r/cRaG0rPowZ)