.net 帮助理解Regex名称模式

.net 帮助理解Regex名称模式,.net,regex,.net,Regex,我试图理解(?pattern)在正则表达式中是如何工作的。是否有一个好的链接或有人能提供一个简单的解释?来自: 命名捕获: \b(?<Area>\d\d\d\)-(?<Exch>\d\d\d)-(?<Num>\d\d\d\d)\b \b(?\d\d\d\)-(?\d\d\d)-(?\d\d\d\d)\b 这将使用美国电话号码的组件“填充名称”区域、Exch和Num。然后,程序可以通过名称引用每个匹配的子字符串,例如,VB.NET和大多数其他.NET语言中的

我试图理解(?pattern)在正则表达式中是如何工作的。是否有一个好的链接或有人能提供一个简单的解释?

来自:

命名捕获:

\b(?<Area>\d\d\d\)-(?<Exch>\d\d\d)-(?<Num>\d\d\d\d)\b
\b(?\d\d\d\)-(?\d\d\d)-(?\d\d\d\d)\b
这将使用美国电话号码的组件“填充名称”区域、Exch和Num。然后,程序可以通过名称引用每个匹配的子字符串,例如,VB.NET和大多数其他.NET语言中的RegexObj.Groups(“Area”),C#中的RegexObj.Groups[“Area”],Python中的RegexObj.group(“Area”)和PHP中的$matches[“Area”]结果是代码更清晰。

在正则表达式本身中,捕获的文本可通过\k with.NET以及Python和PHP中的(?p=Area)获得


使用Python和.NET(但不使用PHP),您可以在同一个表达式中多次使用相同的名称。

此功能使您可以使用友好的名称而不是索引,轻松引用从代码(参见示例)或正则表达式本身捕获的内容。 一个简单的例子:


Regex regex = new Regex(@"(?<foo>[fF][oO][oO]) \k<foo>");

foreach (Match match in regex.Matches("bar fOO foO foO f0O"))
{
    Console.WriteLine(match);
}

正则表达式正则表达式=新正则表达式(@“(?[fF][oO][oO])\k”);
foreach(regex.Matches中的Match(“bar-fOO-fOO-fOO-f0O”))
{
控制台写入线(匹配);
}
印刷品

foO foO 福福 这个正则表达式允许您捕获带有任意大小写字母组合的“foo”,但前提是它前面有另一个带有完全相同大小写字母集的“foo”。您还可以使用
match.Groups[“name”]
语法引用您的组,因此在本例中,
match.Groups[“foo”]
将返回“foo”


编辑:将使用\k语法的新示例。

这通常用于反向引用问题。见: