3

当我在示例中遇到此问题时,我只是在浏览 perldocs(http://perldoc.perl.org/perlre.html#Regular-Expressions - 请参阅捕获组示例)

"aa" =~ /${a}/; # True
"aa" =~ /${b}/; # True
"aa0" =~ /${a}0/; # False!
"aa0" =~ /${b}0/; # True
"aa\x08" =~ /${a}0/; # True!
"aa\x08" =~ /${b}0/; # False

我找不到任何关于该语法含义的文档。

那么正则表达式 /${a}/ 在这种情况下是什么意思呢?

4

2 回答 2

3

需要大括号来消除歧义$a$a0请注意,tokenizer 是贪婪的,因此变量名是可能的最长序列。如果在变量插值中跟随另一个字母或数字,则需要${name}语法。

于 2012-05-19T11:26:53.193 回答
2

带括号的 $ 避免了变量名称的歧义。这样:

$foo = 'house';
'housecat' =~ /$foo/;      # matches
'cathouse' =~ /cat$foo/;   # matches
'housecat' =~ /${foo}cat/; # matches

同样在您提供的链接中,有 $a 和 $b 的定义,但您忘记在此处复制。

于 2012-05-19T10:52:22.837 回答