任何人都可以建议我下面Perl正则表达式的含义:
$_ =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/;
Run Code Online (Sandbox Code Playgroud)
什么是角色$1和$2如何定义这些变量?
Gre*_*reg 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
Run Code Online (Sandbox Code Playgroud)
每个捕获组按照它们在RegEx中出现的顺序放入编号变量中
$ 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";
Run Code Online (Sandbox Code Playgroud)
执行:
%> ./test.pl str1,ab.str2,str3,str4,
str1,ab.str2,str3,str4,
$1 = str1,
$2 = str2,
str1,str2,str4,
Run Code Online (Sandbox Code Playgroud)