为什么在下面的代码中,为了匹配字符串,那么我们必须使用两个反斜杠转义'$'而不是一个?
<?php
$text = "$3.99";
preg_match_all("/\\$\d+\.\d{2}/", $text, $matches) ;
var_dump($matches) ;
?>
output: array (size=1)
0 =>
array (size=1)
0 => string '$3.99' (length=5)
模式的匹配规则是什么:“/\ $ \ d+。\ d {2} /”(一个反斜杠)
答案 0 :(得分:2)
http://php.net/manual/en/language.types.string.php
来自文档
如果字符串用双引号(&#34;)括起来,PHP将解释更多特殊字符的转义序列:
然后
\\ backslash
\$ dollar sign
所以双反斜杠是字符串而不是正则表达式
单个反斜杠会导致$ literal然后传递给正则表达式
答案 1 :(得分:0)
我认为php有一些描述正则表达式字符串的选项
在第一级,他们似乎想要某种字符串因为
他们没有像Perl这样的运营商引用,至少我不这么认为。
2级,他们转到正则表达式分隔符(远离双引号作为分隔符)。
等级3,原始正则表达式在1&amp;之后保持裸露。 2完成了。
通常情况下,你已经将进程反向3 - 2 -1,并将其呈现给php源代码。
注意 - 正则表达式分隔符是一项棘手的业务。在第2级,你有可能
选择正则表达式中不可避免的分隔符。在您的情况下&#39; $
&#39;将
不是一个可行的分隔符。
一些可能性可能对你有帮助......
\$\d+\.\d{2} # raw regex
/\$\d+\.\d{2}/ # no quote, using '/' for delimeter
'/\$\d+\.\d{2}/' # single quotes ""
"/\\$\\d+\\.\\d{2}/" # double quotes ""
~\$\d+\.\d{2}~ # no quote, using '~' for delimeter
'~\$\d+\.\d{2}~' # single quotes ""
"~\\$\\d+\\.\\d{2}~" # double quotes ""