Perl 正则表达式 - gc 修饰符是什么意思?

22

我有一个正则表达式,可以匹配一些文本,如下:

$text =~ m/$regex/gcxs

现在我想知道gc修饰符的含义:

我搜索并发现gc的意思是“允许在/g匹配失败后继续搜索”。

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

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

2个回答

34

/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


此答案已被添加到 Stack Overflow 正则表达式 FAQ 中的“修饰符”部分。 - aliteralmind

5
perldoc perlre中,讨论了gc修饰符:
全局匹配,并保持当前位置在匹配失败后。与 i、m、s 和 x 不同,这两个标志影响正则表达式使用的方式,而不是正则表达式本身。有关 g 和 c 修饰符的进一步解释,请参见perlretut中有关在Perl中使用正则表达式的部分。
指定的引用 leads to a page,其中包含一个名为“Global matching”的子节,其中包含一个小教程 / 工作示例,其中包括:
匹配失败或更改目标字符串将重置位置。如果您不希望在匹配失败后重置位置,请添加//c,例如/regexp/gc。字符串中的当前位置与字符串相关联,而不是与正则表达式相关联。这意味着不同的字符串具有不同的位置,并且它们各自的位置可以独立设置或读取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接