代码之家  ›  专栏  ›  技术社区  ›  Yuriy Faktorovich

帮助理解regex名称模式

  •  0
  • Yuriy Faktorovich  · 技术社区  · 15 年前

    我在试着理解…<name>pattern)在regex中有效。有没有一个好的链接,或者有人能提供一个简单的解释?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Ash    15 年前

    Mastering Regular Expressions :

    命名捕获:

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

    这将使用美国电话号码的组成部分“填充姓名”区域、exch和num。然后,程序可以通过它的名称来引用每个匹配的子串,例如VB.NET中的ReExxObj.GROUP(“区域”)和大多数其他.NET语言,ReExxObj.GROUP(“区域”)、Python中的ReXObj.GROUP(“区域”)和PHP中的$匹配(“区域”)。 结果是代码更清晰。

    在正则表达式本身中,捕获的文本可以通过带有.NET的\k获得,并且(?p=area)在python和php中。

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

        2
  •  0
  •   Marcin Deptuła    15 年前

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

    
    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<name>语法的新示例。