26

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

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

原来的字符串是

"huge dinosaur"

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

"huge (huge !)dinosaur"

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

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

谢谢

编辑:我现在明白了&符号的含义,它保存了匹配,而 $` 保存了匹配前的值,现在我再次不明白的是这整个部分:

($`!)$&

这部分是怎么变成的

(huge !)
4

2 回答 2

31

你是对的,$`是一个特殊的变量,它保存匹配前的内容。$&相似,但保存匹配的内容并$'保存匹配后的内容。

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

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

请注意,匹配的是dinosaur. 然后它用左括号、感叹号、右括号和最后(匹配的内容)替换dinosaur 字符串的一部分。"huge "dinosaur

检查 Perl 文档中的perlvarperlre

于 2013-05-08T01:34:50.950 回答
16

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

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

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

更多信息,请查阅http://www.regular-expressions.info/perl.html

于 2013-05-08T01:33:47.013 回答