任何人都可以建议我下面Perl正则表达式的含义:
$_ =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/;
$1
和$2
的作用是什么以及如何定义这些变量?
答案 0 :(得分:10)
正则表达式意味着:
^ Start of string
( Start of capturing group -> $1
[^,]+ Any character except ",", one or more times
, A literal ","
) End of capturing group
ab "ab"
. Any character
([^,]+,) Same as previously -> $2
(?: Start a non-capturing group
[^,]+, Same as previously
) End group
每个捕获组按照它们在RegEx中出现的顺序放入编号变量
答案 1 :(得分:6)
$ 1和$ 2变量是匹配变量。
在正则表达式中,当某些东西被括号括起来时,正则表达式的那部分(如果匹配)将存储在$ n变量中。
所以例如:/(\ d +),(\ w +)/会匹配123,xyz,123分配给$ 1,xyz分配$ 2。它们按照它们出现在正则表达式中的顺序分配。
请注意,在前导括号后面的“?:”即(?:...),告诉正则表达式不将该匹配值保存在$ n变量中。
以下示例代码演示了正则表达式使用Perl执行的操作。请注意,您的问题中的正则表达式中缺少前导s(替换)。
文件:test.pl
#!/usr/bin/perl
print $ARGV[0], "\n";
$ARGV[0] =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/;
print "\$1 = $1\n";
print "\$2 = $2\n";
print $ARGV[0], "\n";
<强>执行:强>
%> ./test.pl str1,ab.str2,str3,str4,
str1,ab.str2,str3,str4,
$1 = str1,
$2 = str2,
str1,str2,str4,