【问题标题】:REGEX not functioning properly, preg_match正则表达式无法正常运行,preg_match
【发布时间】:2014-07-01 21:48:12
【问题描述】:

这个正则表达式没有像我希望的那样工作......

/<ol class=\"references\">\/(.*?)<\/ol>/s

我在 PHP 中将它与 preg_match 结合使用。

preg_match_all("/<ol class=\"references\">\/(.*?)<\/ol>/s", $file, $mats);

当我把它放在http://regex101.com/ 中时,问题似乎是它希望匹配/解析的字符串是&lt;ol class="references"&gt;/text here&lt;/ol&gt;

上面写着:\/ matches the character / literally

但是,我希望 REGEX 和 PHP 的 sn-p 解析 &lt;ol class="references"&gt;text here&lt;/ol&gt;

【问题讨论】:

  • 出于我自己的特殊原因,我正在使用正则表达式。
  • 我知道 DOM 解析器。 :) 谢谢。
  • @JohnConde 这就是为什么可以使用正则表达式解析 HTML:stackoverflow.com/a/1733489/764357
  • 感谢@LegoStormtroopr。我正在寻找轻量级的东西,我正在解析轻量级的文本,正则表达式非常适合。我已按问题发布以接收符合我的规范的答案。此外,我可以做一个任务?关于正则表达式和 HTML,我已经听过很多次了。

标签: php regex html-parsing preg-match


【解决方案1】:

这是正确的 \/ 匹配文字斜线,因此您的模式无法匹配:

<ol class="references">text here</ol>

正如表达式要求在第一个&gt; 之后的文字/。只需删除它,它应该可以按要求工作:

<ol class=\"references\">(.*?)<\/ol>

如果元素的内部文本中偶尔有斜线 (/),您不想捕获,则可以进行量化匹配 - ? - 如下所示:

<ol class=\"references\">\/?(.*?)<\/ol>

【讨论】:

  • 警告:preg_match_all() [function.preg-match-all]: Unknown modifier '(' in /home/content/76/10008776/html/stuck.php on line 10
  • 或警告:preg_match_all() [function.preg-match-all]:编译失败:第 10 行 /home/content/76/10008776/html/stuck.php 中偏移 28 处的括号不匹配
  • 实际上,没有正确的方法。并且正则表达式根据 regex101 有效。是否正确复制?
  • 是的,我确实正确复制了它。它确实说有效,但是在 php 中我收到警告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多