【问题标题】:Help understanding Regex name patterns帮助理解正则表达式名称模式
【发布时间】:2009-08-30 14:11:15
【问题描述】:

我试图了解 (?pattern) 在正则表达式中的工作原理。有没有好的链接或者有人可以提供一个简单的解释?

【问题讨论】:

标签: .net regex


【解决方案1】:

来自Mastering Regular Expressions

命名捕获:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    
    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”。您还可以使用 match.Groups["name"] 语法引用您的组,因此在本例中,match.Groups["foo"] 将返回“foO”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-04
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2011-06-10
      相关资源
      最近更新 更多