帮助理解正则表达式名称模式

时间:2009-08-30 14:11:15

标签: .net regex

我正在尝试了解(?< name>模式)在Regex中的工作原理。是否有一个很好的链接或有人可以提供一个简单的解释?

2 个答案:

答案 0 :(得分:0)

来自Mastering Regular Expressions

命名捕获:

\b(?<Area>\d\d\d\)-(?<Exch>\d\d\d)-(?<Num>\d\d\d\d)\b

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

在正则表达式本身中,捕获的文本可通过.NET获取,以及Python和PHP中的(?P = Area)。

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

答案 1 :(得分:0)

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


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

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

打印

foO foO

这个正则表达式允许你用大小写字母的任意组合捕获“foo”,但只有在它之前有另一个“foo”与完全相同的大小写字母组合。您也可以使用match.Groups["name"]语法引用您的论坛,因此在此示例中,match.Groups["foo"]将返回“foO”。

编辑:将使用\ k&lt; name&gt;的新示例语法。