此代码:
<?php
$string = "\"single quote";
preg_match_all("/\"/im", $string, $m);
$all_quotes = count($m);
preg_match_all("/\\\"/im", $string, $m);
$escaped_quotes = count($m);
echo "<pre>";
echo "<b>string:</b> $string<br>";
echo "<b>all quotes:</b> $all_quotes<br>";
echo "<b>escaped quotes:</b> $escaped_quotes<br>";
echo "</pre>";
?>
应匹配所有引号,然后匹配所有转义引号,并回显结果。
出于某种原因,对于字符串"single quote
,它会回显一个引号和一个转义引号,但是/\\\"/im
模式在http://regexr.com中使用相同的字符串执行时不匹配。
答案 0 :(得分:0)
编辑:
好的,首先,您将从preg_match_all
计算返回值。现在你的方式总是会显示1
因为preg_match_all
返回数组(在你的情况下有一个元素)。
正如WiktorStribiżew所说,你也需要调整你的正则表达式
preg_match_all("/\\\\\"/im", $string, $m);
我不是100%确定我理解你的问题,但我会尽力回答。
您可能希望在\"
变量中看到$string
,对吗?
但事实并非如此。 PHP将在保存字符串之前删除该反斜杠。这只是PHP的一个提示,你想得到文字"
并且你不想在这里结束字符串。
如果你想(因任何原因)获得\"
,你必须使用这样的代码:
$string = "\\\"single quote";