Perl中$ 1的含义是什么?

Cha*_*hon 63 regex perl

Perl中$ 1的含义是什么?此外,$ 2是什么意思?有多少$ number变量?

rlb*_*ond 65

如果匹配成功,$number变量包含与上一个正则表达式匹配模式中的捕获组 匹配的字符串部分( ... ).

例如,采用以下字符串:

$text = "the quick brown fox jumps over the lazy dog.";
Run Code Online (Sandbox Code Playgroud)

声明之后

$text =~ m/ (b.+?) /;
Run Code Online (Sandbox Code Playgroud)

$1等于文本" brown".

  • 如果有不止一场比赛怎么办?我们能以某种方式获得所有比赛吗? (2认同)

Jim*_*uls 35

数字变量是您应用的上一个成功匹配或替换运算符的匹配:

my $string = 'abcdefghi';

if ($string =~ /(abc)def(ghi)/) {
    print "I found $1 and $2\n";
}
Run Code Online (Sandbox Code Playgroud)

在使用$ 1之前,请务必测试匹配或替换是否成功,依此类推.否则,您可能会从另一个操作中获取剩余物.

Perl的正则表达式都记录在perlre.

  • 我只用真相完全取代了答案.几乎所有原始答案都是错误的. (5认同)
  • $ 1到$ 9并不总是存在.我认为吉姆误读了这个手册页.我引用相关部分:"你可以拥有任意数量的括号.如果你有超过9个子串,变量$ 10,$ 11,...引用相应的子串.在模式中,\ 10,\ 11如果在反向引用之前至少有多个左括号,则返回子串.否则(为了向后兼容)\ 10与\ 010,退格相同,\ 11与\ 011相同,一个选项卡等等.(\ 1到\ 9总是反向引用.)" (3认同)
  • -1太多半真半假了.它们是捕获的结果,而不是整体的匹配.它们仅在成功匹配时设置,这意味着您需要在使用之前检查匹配是否成功.正如Alan已经指出的那样,你已经混淆了备用反斜杠表示法的特殊情况行为. (2认同)

plu*_*lus 11

$ 1,$ 2等将包含上次成功匹配的捕获值- 在访问之前检查匹配是否成功很重要,即

 if ( $var =~ m/( )/ ) { # use $1 etc... }
Run Code Online (Sandbox Code Playgroud)

问题的一个例子 - $ 1在下面的两个打印语句中都包含'Quick':

#!/usr/bin/perl

'Quick brown fox' =~ m{ ( quick ) }ix;
print "Found: $1\n";

'Lazy dog' =~ m{ ( quick ) }ix;
print "Found: $1\n";
Run Code Online (Sandbox Code Playgroud)


Ein*_*ein 9

正如其他人指出的那样,$ x是正则表达式的捕获变量,允许您引用匹配模式的部分.

Perl还支持命名捕获,在某些情况下人类可能更容易记住.

给定输入:111 222

/(\d+)\s+(\d+)/
Run Code Online (Sandbox Code Playgroud)

1美元是111

2美元是222

人们还可以说:

/(?<myvara>\d+)\s+(?<myvarb>\d+)/
Run Code Online (Sandbox Code Playgroud)

$ + {myvara}是111

$ + {myvarb}是222


Joh*_*n T 6

这些被称为"匹配变量".如前所述,它们包含您上次正则表达式匹配的文本.

更多信息请访问:http://cslibrary.stanford.edu/108/EssentialPerl.html

(CTRL-F代表'匹配变量'找到相应的部分)