2015-05-12 27 views
2

我繼續瞭解PHP和PCRE。我今天的問題如下:PCRE和PHP - 轉義元字符

<?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字符的編碼搞亂了,但我不完全理解爲什麼。

有人可以提供詳細的答案嗎?

+1

這是[PHP](HTTP:// EN .wikipedia.org/wiki/PHP),順便說一句! – someOne

+0

[PHP中單引號和雙引號字符串有什麼區別?]可能的重複(http://stackoverflow.com/questions/3446216/what-is-the-difference-between-single-quoted-and -double引號串式的PHP) – Cristik

回答

1

Single quote strings不處理(不按雙引號串的程度,要準確)並採取「原樣」,但是當在double quotes指定字符串時,多個特殊字符是可用的並且變量內解析它。

如果在雙引號字符串中遇到美元符號($),解析器會貪婪地採取儘可能多的令牌來形成有效的變量名稱。因此,在您的代碼的雙引號字符串中,$有一些特殊的含義,並且不是代表$\的字符,也有一些特殊的含義並用於指示轉義序列的開始)的字符。

要指定美元符號的文字和雙引號的字符串反斜槓,你需要使用的\$\\轉義序列,分別爲:

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