我在Perl中使用正则表达式。我遇到的一件事:
my $n = " 49 here";
$n =~ s/\G /0/g;
print $n;
这给出:
00049 here
我知道s
修饰符(单行)。我也了解g
修饰符(全局变量,它跟踪最后一个匹配位置)。我知道regex用零代替某些东西,但我不明白\G
它后面的AND空格是什么(\G
结果后面没有空格是0 49 here
)。
\G
被称为G-锚构造。这意味着它必须与上次成功匹配结束的位置匹配。在任何正则表达式开始之前,\G
(实际上是一个标志)为true
,因此它将以true开头,然后寻找一个空格,找到它,仍然为true,然后找到下一个,依此类推。等到没有找到空格时,\G
flag变为false并保持这种方式(在这种情况下)。
如果没有它,它将在字符串的任何地方而不是在开头寻找空间。
$ perl -E'my $n = " 49 here"; $n =~ s/\G /0/g; say $n'
00049 here
$ perl -E'my $n = " 49 here"; $n =~ s/ /0/g; say $n'
000490here
/\G/g
仅在Perl的开头仅匹配1次,因为Perl不会两次返回完全相同的匹配(定义为具有相同的起始位置和长度)。这就是为什么它在0
此处添加一个并在以下位置停止的原因:
$ perl -E'my $n = " 49 here"; $n =~ s/\G/0/g; say $n'
0 49 here
在Perl中,最后一个匹配结束的位置与要匹配的变量(不是运算符)相关联。可以使用该pos
功能进行观察和更改。\G
标志保留在变量中,而不是正则表达式中。由于它与要匹配的变量相关联,因此在另一个正则表达式的后续应用程序中,\G
将从保留的最后一个匹配项开始。
$ perl -E'my $n = "abcdefabc"; $n =~ /def/g; $n =~ s/\Gabc/ABC/; say $n'
abcdefABC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句