【问题标题】:preg_match_all not finding matchpreg_match_all 找不到匹配项
【发布时间】:2014-08-20 16:15:41
【问题描述】:

表达式似乎没有任何问题。我已经将它与几个编辑器中的示例 HTML 进行了匹配。但是一旦我将它插入 preg_match_all,我就没有得到任何结果。

有什么想法吗?

$regex_lists = '~<ul.*?>.+?</ul>~m';
preg_match_all($regex_lists, $html, $lists);

var_dump($lists); //empty array

示例 HTML

<ul type="disc">
<br><li class="MsoNormal" style="margin: 0in 0in 10pt; line-height: normal; mso-margin-      top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list   .5in;">
<span style='font-family: "Arial","sans-serif"; font-size: 12pt; mso-fareast-font-  family: "Times New Roman";'>Maintain complete knowledge of and comply with all departmental policies/service procedures/standards. <p></p></span>
<br>
</li>
<li class="MsoNormal" style="margin: 0in 0in 10pt; line-height: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in;">
<span style='font-family: "Arial","sans-serif"; font-size: 12pt; mso-fareast-font-  family: "Times New Roman";'>Maintain complete knowledge of correct maintenance and use of equipment. Use equipment only as intended. <p></p></span>
<br>
</li>
</ul>

【问题讨论】:

  • 你可能想看看这个:stackoverflow.com/questions/3577641/…
  • 谢谢 我主要使用 DOMDoc、SimpleXML 和 XPATH 库。在这种情况下,由于内容和格式不一致,我使用了正则表达式。我正在使用正则表达式根据特定的表达式将 DOM 分解成碎片,这会留下未闭合的标签。不确定这是否是最佳实践,但它很快,并且根据 anubhava 的建议,我想我已经完成了大约 90% 的任务。
  • 只要您了解这些选项,您始终可以选择最适合您的特定用例的选项 :-)

标签: php regex preg-match-all


【解决方案1】:

由于您的输入也有换行符,因此您需要 s (DOTALL) 标志来使点匹配换行符:

$regex_lists = '~<ul.*?>.+?</ul>~is';

$regex_lists = '~<ul[^>]*>.+?</ul>~is';

PS:您的正则表达式中也不需要m 标志。

【讨论】:

  • 太棒了!就是这样。我正在使用 m 修饰符,认为它是“点匹配新行”修饰符。感谢您指出正确的用法。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2019-12-01
  • 2011-08-07
相关资源
最近更新 更多