下面的C#代码是我将Perl代码重新创建为C#。它是相同的正则表达式,但结果不同。Perl代码被捕获为“ a”,而C#代码被捕获为“ apple”。是什么使它与众不同?
C#代码
string word = Regex.Replace("apple", "(?<C>a(?=pple)|b(?=anana)|c(?=herry))", "${C}");
Console.WriteLine("fruit\'s initial: {0}", word); // result: "fruit's initial: apple"
Perl代码
my $word = 'apple';
if ($word =~ /(?<C>a(?=pple)|b(?=anana)|c(?=herry))/) {
print "fruit\'s initial: $+{C}"; // result: "fruit's initial: a"
}
在Perl中,您匹配并捕获了第一个,a
然后将其捕获pple
到“ C”组中,然后进行了打印。在C#中,您更换a
注视着pple
用a
,得到了apple
不变的结果。
改用匹配:
var m = Regex.Match("apple", "(?<C>a(?=pple)|b(?=anana)|c(?=herry))");
if (m.Success)
{
Console.WriteLine("fruit\'s initial: {0}", m.Groups["C"].Value);
}
参见C#演示。
在此,将正则表达式匹配分配给m
变量。如果发生匹配(if (m.Success)
),则可以使用来获取“ C”组值m.Groups["C"].Value
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句