PHP preg_match_all不';不匹配转义引号
此代码:PHP preg_match_all不';不匹配转义引号,php,regex,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:&l
<?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
,它同时回显一个quote和一个转义的quote,但是模式/\\\”/im
在同一字符串中执行时不匹配任何内容。编辑:
好的,首先,您将从preg\u match\u all
获取计数作为返回值。您现在执行此操作的方式将始终向您显示1
,因为preg\u match\u all
返回数组(在您的示例中有一个元素)
正如Wiktor Stribiżew所说,您也需要调整正则表达式
$string = "\\\"single quote";
我不能百分之百确定我是否理解你的问题,但我会尽力回答 您可能希望在
$string
变量中看到\“
,对吗
但事实并非如此。PHP将在保存字符串之前删除该反斜杠。这只是对PHP的一个提示,提示您希望获取文本“
,并且您没有尝试在此处结束字符串
如果您希望(出于任何原因)获得\“
,则必须使用以下代码:
不,$string非常好,应该是
“单引号
@WearyAdventurer,那么您希望从该代码中得到什么呢?是否应该显示一个引号和零个转义引号?问题已解决。谢谢你的正则表达式很好,这不是真的preg\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
将只匹配“
,而不匹配\”
。“\”
不包含反斜杠。检查。可能的副本
$string = "\\\"single quote";