Perl中正则表达式中&符号的用法是什么?

时间:2013-05-08 01:23:53

标签: regex perl

伙计我在Perl中有这个正则表达式,我不明白。

s/\w+$/($`!)$&/;

原始字符串是

"huge dinosaur"

执行正则表达式后,字符串现在为:

"huge (huge !)dinosaur"

我完全不明白这是怎么回事。我不明白&符号在那里做什么。我理解$`,但为什么它就在那里,我知道$`在匹配前获取值,这是我认为没有,因为在上面的正则表达式之前没有匹配的表达式。

如果有人可以将我链接到一些关于Perl正则表达式的非常有用的教程,我们非常感谢。

由于

编辑:我现在明白了&符号的意思,它保存了匹配,并且$`在比赛前保存了值,现在我不理解的是整个部分:

($`!)$&

这部分怎么变成

(huge !)

2 个答案:

答案 0 :(得分:27)

你是对的,$`是一个保存之前内容的特殊变量 比赛。 $&类似,但保留了匹配的内容,$'保留了所有内容 比赛结束后。

"huge dinosaur"/\w+$/匹配dinosaur。所以变量内容 是:

$` => "huge "
$& => "dinosaur"
$' => ""

请注意,匹配的内容是dinosaur。然后它正在取代dinosaur 字符串的一部分,带有一个开口的parens,"huge ",感叹号, 关闭parens,最后dinosaur(匹配的是什么)。

查看perlvarperlre

的Perl文档

答案 1 :(得分:16)

$&(美元&符号)保持整个正则表达式匹配。

$'(美元后跟撇号或单引号)保留正则表达式匹配之后(右侧)的字符串部分。

$`(美元反推)在正则表达式匹配之前(左侧)保存字符串的一部分。

有关详细信息,请参阅http://www.regular-expressions.info/perl.html