伙计我在Perl中有这个正则表达式,我不明白。
s/\w+$/($`!)$&/;
原始字符串是
"huge dinosaur"
执行正则表达式后,字符串现在为:
"huge (huge !)dinosaur"
我完全不明白这是怎么回事。我不明白&符号在那里做什么。我理解$`,但为什么它就在那里,我知道$`在匹配前获取值,这是我认为没有,因为在上面的正则表达式之前没有匹配的表达式。
如果有人可以将我链接到一些关于Perl正则表达式的非常有用的教程,我们非常感谢。
由于
编辑:我现在明白了&符号的意思,它保存了匹配,并且$`在比赛前保存了值,现在我不理解的是整个部分:
($`!)$&
这部分怎么变成
(huge !)
答案 0 :(得分:27)
你是对的,$`
是一个保存之前内容的特殊变量
比赛。 $&
类似,但保留了匹配的内容,$'
保留了所有内容
比赛结束后。
在"huge dinosaur"
,/\w+$/
匹配dinosaur
。所以变量内容
是:
$` => "huge "
$& => "dinosaur"
$' => ""
请注意,匹配的内容是dinosaur
。然后它正在取代dinosaur
字符串的一部分,带有一个开口的parens,"huge "
,感叹号,
关闭parens,最后dinosaur
(匹配的是什么)。
查看perlvar
和perlre
。
答案 1 :(得分:16)
$&
(美元&符号)保持整个正则表达式匹配。
$'
(美元后跟撇号或单引号)保留正则表达式匹配之后(右侧)的字符串部分。
$`
(美元反推)在正则表达式匹配之前(左侧)保存字符串的一部分。