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

rug*_*ted 24 regex perl

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

s/\w+$/($`!)$&/;
Run Code Online (Sandbox Code Playgroud)

原来的字符串是

"huge dinosaur"
Run Code Online (Sandbox Code Playgroud)

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

"huge (huge !)dinosaur"
Run Code Online (Sandbox Code Playgroud)

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

如果有人可以链接我一些关于Perl正则表达式的非常有用的教程,我真的很感激.

谢谢

编辑:我现在明白了&符号意味着什么,它保存了比赛和$`在比赛前保存了价值,现在我不理解的是整个部分:

($`!)$&
Run Code Online (Sandbox Code Playgroud)

这个部分是怎么变成的

(huge !)
Run Code Online (Sandbox Code Playgroud)

sid*_*yll 28

你是对的,$`是一个特殊的变量,它在匹配之前保存内容.$&是相似的,但保持匹配的东西,并$'保持比赛后的东西.

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

$` => "huge "
$& => "dinosaur"
$' => ""
Run Code Online (Sandbox Code Playgroud)

请注意,匹配的是dinosaur.然后它dinosaur 用一个开口的parens "huge ",感叹号,关闭的parens和最后dinosaur(匹配的)替换字符串的一部分.

检查Perl文档perlvarperlre.


小智 16

$& (美元&符)持有整个正则表达式匹配.

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

$` (美元反引号)保持正则表达式匹配之前(左侧)字符串的一部分.

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