【问题标题】:PCRE and PHP - Escaping meta-characterPCRE 和 PHP - 转义元字符
【发布时间】:2015-05-12 08:49:09
【问题描述】:

我继续学习 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 字符的编码,但我不完全明白为什么。

谁能提供详细的答案?

【问题讨论】:

标签: php preg-match pcre


【解决方案1】:

Single quote strings 不被处理(准确地说,不是双引号字符串的范围)并按“原样”使用,但是当在double quotes 中指定字符串时,更多的特殊字符可用和变量在其中进行解析。

如果在双引号字符串中遇到美元符号 ($),解析器将贪婪地采用尽可能多的标记来形成有效的变量名。所以在你代码中的双引号字符串中,$有一些特殊的含义,not代表$的字符(\的字符,也有一些特殊的含义和用于指示转义序列的开始)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多