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
".
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.
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)
正如其他人指出的那样,$ 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
这些被称为"匹配变量".如前所述,它们包含您上次正则表达式匹配的文本.
更多信息请访问:http://cslibrary.stanford.edu/108/EssentialPerl.html
(CTRL-F代表'匹配变量'找到相应的部分)
归档时间: |
|
查看次数: |
134602 次 |
最近记录: |