伙计我在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文档perlvar和perlre.
小智 16
$& (美元&符)持有整个正则表达式匹配.
$' (美元后跟撇号或单引号)在正则表达式匹配之后(右侧)保持字符串的一部分.
$` (美元反引号)保持正则表达式匹配之前(左侧)字符串的一部分.
有关详细信息,请参阅http://www.regular-expressions.info/perl.html