PHP preg_match_all与转义的报价不匹配

时间:2017-01-12 20:30:51

标签: php regex

此代码:

<?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中使用相同的字符串执行时不匹配。

1 个答案:

答案 0 :(得分:0)

编辑:

好的,首先,您将从preg_match_all计算返回值。现在你的方式总是会显示1因为preg_match_all返回数组(在你的情况下有一个元素)。

正如WiktorStribiżew所说,你也需要调整你的正则表达式

preg_match_all("/\\\\\"/im", $string, $m);

我不是100%确定我理解你的问题,但我会尽力回答。

您可能希望在\"变量中看到$string,对吗?

但事实并非如此。 PHP将在保存字符串之前删除该反斜杠。这只是PHP的一个提示,你想得到文字"并且你不想在这里结束字符串。

如果你想(因任何原因)获得\",你必须使用这样的代码:

$string = "\\\"single quote";