为什么在下面的代码中,为了匹配字符串,我们必须用两个反斜杠而不是一个来转义'$' ?
<?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}/"(一个反斜杠)
http://php.net/manual/en/language.types.string.php
从docs
然后如果字符串用双引号(")括起来,PHP将为特殊字符解释更多的转义序列:
'' backslash
'$ dollar sign
双反斜杠表示字符串而不是正则表达式
一个反斜杠会产生$ literal,然后传递给正则表达式
我认为php有几个选项来描绘正则字符串。
在第一层,它们似乎想要某种类型的字符串,因为
它们不像Perl那样有引号运算符,至少我不这么认为。
第2级,它们移动到regex分隔符(避免双引号作为分隔符)。
Level 3,原始正则表达式在1 &2个完成了。
通常情况下,你把3 - 2 -1的过程颠倒过来,然后把它呈现给php源代码。
注意- Regex分隔符是一件棘手的事情。在第2级,你可能会
选择正则表达式中不可避免的分隔符。在您的示例中,' $
'将
不是一个可行的分隔符。
一些可能性可能会帮助你…
'$'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 ""