【问题标题】:PHP: No match when using exclamation mark in regular expressionPHP:在正则表达式中使用感叹号时不匹配
【发布时间】:2012-04-20 11:19:30
【问题描述】:

我正在尝试使用 preg_match 在加载的 HTML 文件中查找注释部分。然而,出现的感叹号似乎打破了它。每当我尝试使用

preg_match("/<!/", "<!", $matches);

返回一个空的 $matches[0]。我试过了

preg_match("/< !/", "< !", $matches);
preg_match("/!</", "!<", $matches);

这些确实返回“

提前致谢。

【问题讨论】:

  • 无法重现:在 CLI 中运行良好。但是,您应该总是 转义转义符号,如果您不希望它转义行为 `\\`
  • 很奇怪。我想知道它可能是什么。那实际上是一个错字。哈哈。

标签: php regex escaping no-match


【解决方案1】:

您确定返回的是一个空的$matches[0],还是只是$matches[0] 本身就是一个隐藏的HTML 注释?尝试var_dump($matches) 并检查字符串的长度。

【讨论】:

  • 同样的事情。返回:array(1) { [0]=> string(2) "
  • 看,长度是 2。发生的事情是&lt;! 被视为 HTML 标记的开始,因此不会显示在浏览器中。如果您执行echo htmlspecialchars($matches[0]);,您将非常清楚地看到&lt;!。如果您查看了页面的源代码,您还会看到 &lt;!
  • 哦,有道理。我为我的愚蠢道歉。哈哈。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多