代码之家  ›  专栏  ›  技术社区  ›  Jez

如何反转正则表达式组捕获逻辑?

  •  0
  • Jez  · 技术社区  · 7 年前

    要在使用的正则表达式中创建捕获组 (match) 你给它加上前缀 ?: 让它不被捕获,比如 (?:match) (或其他)。我该怎么做?我主要在.NET中使用正则表达式,但我不介意其他语言使用正则表达式,如Perl、PHP、Python、JavaScript等。

    2 回复  |  直到 7 年前
        1
  •  3
  •   user2819245 user2819245    7 年前

    如果你想避免 (?: ) 转身 ( ) RegexOptions.ExplicitCapture 选项仅命名组( (?<name>subexpression) )如果使用此选项,将捕获。

    但是,您不能打开非捕获组 (?: )

    正则表达式构造函数以及正则表达式类中的其他方法接受 RegexOptions

    例如:

    Regex.Matches(input, pattern, RegexOptions.ExplicitCapture)
    
        2
  •  4
  •   zdim    5 年前

    named capture groups 您可以简单地将它们用于您想要捕获的内容,而忽略编号的。

    my $string = q(Available from v5.10 in Perl.);
    
    $string =~ /([A-Z].+?)(?<ver>[0-9.]+)\s+(.*?)\./;
    
    say "Version: $+{ver}";
    

    %+ \k<name> \g{name} .