【问题标题】:Perl Regular Expression - What does gc modifier means?Perl 正则表达式 - gc 修饰符是什么意思?
【发布时间】:2012-07-08 20:55:22
【问题描述】:

我有一个匹配某些文本的正则表达式:

$text =~ m/$regex/gcxs

现在我想知道 'gc' 修饰符是什么意思:

我搜索了一下,发现gc的意思是“允许/g匹配失败后继续搜索”

这对我来说不是很清楚。继续搜索是什么意思?

据我了解,这意味着如果 /g 搜索失败,则从头开始匹配。但是 /g 修饰符不匹配整个字符串吗?

【问题讨论】:

    标签: regex perl modifier


    【解决方案1】:

    /g 修饰符用于记住“字符串中的位置”,以便您可以增量处理字符串。例如

    my $txt = "abc3de";
    while( $txt =~ /\G[a-z]/g )
    {
        print "$&";
    }
    while( $txt =~ /\G./g )
    {
        print "$&";
    }
    

    因为位置在匹配失败时被重置,所以上面会输出

    abcabc3de
    

    /c 标志不会在匹配失败时重置位置。因此,如果我们像这样将/c 添加到第一个正则表达式中

    my $txt = "abc3de";
    while( $txt =~ /\G[a-z]/gc )
    {
        print "$&";
    }
    while( $txt =~ /\G./g )
    {
        print "$&";
    }
    

    我们最终得到

    abc3de
    

    示例代码:http://ideone.com/cC9wb

    【讨论】:

    【解决方案2】:

    在 perldoc perlre http://perldoc.perl.org/perlre.html#Modifiers

    全局匹配,匹配失败后保持当前位置。与 i、m、s 和 x 不同,这两个标志会影响 regex 的使用方式,而不是 regex 本身。有关 g 和 c 修饰符的进一步说明,请参阅在 perlretut 中使用 Perl 中的正则表达式。

    指定的 ref 导致:

    http://perldoc.perl.org/perlretut.html#Using-regular-expressions-in-Perl

    此 URI 有一个名为“全局匹配”的小节,其中包含一个小型教程/工作示例,包括:

    匹配失败或更改目标字符串会重置位置。如果您不希望在匹配失败后重置位置,请添加 //c ,如 /regexp/gc 。字符串中的当前位置与字符串相关联,而不是正则表达式。这意味着不同的字符串有不同的位置,它们各自的位置可以独立设置或读取。

    HTH 李

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      相关资源
      最近更新 更多