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)) {
...
我继续学习 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)) {
...