Perl中$ 1的含义是什么?

时间:2009-06-24 03:40:34

标签: regex perl

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

9 个答案:

答案 0 :(得分:63)

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

例如,请使用以下字符串:

$text = "the quick brown fox jumps over the lazy dog.";

声明后

$text =~ m/ (b.+?) /;

$1等于文字“brown”。

答案 1 :(得分:33)

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

my $string = 'abcdefghi';

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

在使用$ 1之前,请始终测试匹配或替换是否成功,依此类推。否则,你可能会从另一个操作中拿起剩菜。

Perl正则表达式记录在perlre

答案 2 :(得分:11)

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

 if ( $var =~ m/( )/ ) { # use $1 etc... }

问题的一个例子 - $ 1在下面的两个印刷语句中都包含“快速”:

#!/usr/bin/perl

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

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

答案 3 :(得分:9)

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

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

给定输入:111 222

/(\d+)\s+(\d+)/

$ 1是111

$ 2是222

还可以说:

/(?<myvara>\d+)\s+(?<myvarb>\d+)/

$ + {myvara}是111

$ + {myvarb}是222

答案 4 :(得分:6)

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

此处提供更多信息:http://cslibrary.stanford.edu/108/EssentialPerl.html

(“匹配变量”的CTRL-F查找相应的部分)

答案 5 :(得分:2)

一般来说,关于Perl中“魔术”变量的问题可以通过查看Perl预定义变量文档来回答:

perldoc perlvar

但是,当您在$ 1等搜索此文档时,除了关于这些“数字”变量的部分之外,您将在许多地方找到引用。你必须搜索

$<digits>

我会通过评论或编辑将其添加到Brian's answer,但我没有足够的代表。如果有人添加了这个,我将删除这个答案。

答案 6 :(得分:2)

既然你问过捕获组,你可能也想知道$ + ..很有用..

use Data::Dumper;
$text="hiabc ihabc ads byexx eybxx";
while($text=~/(hi|ih)abc|(bye|eyb)xx/igs)
{
    print Dumper $+;
}

  

输出:
  $ VAR1 ='hi';
  $ VAR1 ='ih';
  $ VAR1 ='再见';
  $ VAR1 ='eyb';
  

答案 7 :(得分:0)

变量$ 1 .. $ 9也是只读变量,因此您不能隐式地为它们赋值:

  

$ 1 ='foo';打印$ 1;

这将返回错误:在脚本行1处尝试修改只读值。

您也不能在变量名的开头使用数字:

  

$ 1foo ='foo';打印$ 1foo;

以上也会返回错误。

答案 8 :(得分:0)

我怀疑在32位编译的Perl二进制文件中,可以有2**32 -1个编号匹配变量。