PCRE 和 PHP - 转义元字符

PCRE and PHP - Escaping meta-character

我继续学习 PHP 和 PCRE。我今天的问题如下:

<?php
        $search = "Money $ money $ money...";

        /*I get "invalid"*/
        if(preg_match("&money $&", $search)){
              echo 'Valid <br/>';
        }else{
              echo 'Invalid <br/>';
        }

        /*I get "valid"*/
        if(preg_match('&money $&', $search)){
              echo 'Valid <br/>';
        }else{
              echo 'Invalid <br/>';
        }
    ?>

我想当我使用双引号而不是单引号时 PHP 弄乱了 ASCII 字符的编码,但我不完全明白为什么。

有人可以提供详细的答案吗?

Single quote strings are not processed (not to the extent of double quote strings, to be precise) and are taken "as-is", but when a string is specified in double quotes,更多特殊字符可用,变量在其中解析。

如果在双引号字符串中遇到美元符号 ($),解析器将贪婪地获取尽可能多的标记以形成有效的变量名。所以在你的代码中的双引号字符串中,$有一些特殊的含义并且不是代表$的字符([=14的字符=],也有一些特殊的含义,用于表示转义序列的开始)。

要指定双引号字符串中美元符号和反斜杠的字面量,需要分别使用$\的转义序列:

...
// Now, you will also get "valid" here
if(preg_match("&money \$&", $search)) {
...