【发布时间】:2016-02-23 02:49:43
【问题描述】:
我必须通过 php 正则表达式在 HTML 页面中的特定标签之间找到一个值。但我希望如果 HTML 页面包含多个值,则执行 preg_match_all 否则什么也不做。
例如,如果preg_match 在 HTML 中找到 4 个值,则在下一阶段执行 preg_match_all,否则如果是 preg_match,则仅找到 1 个标记值然后什么也不做。
<td class"page">
<span class="my-tag">value1</span>
<span class="my-tag">value2</span>
<span class="my-tag">value3</span>
<span class="my-tag">value4</span>
</td>
preg_match('/<td class"page">(.*?)<\/td>/s';)
now do preg_match_all in next phase because preg_match find 4 values
preg_match_all('|\<span class="my-tag"\>(.*?)\</span\>|', $html, $string);
and if HTML contain only 1 value like this
<td class"page">
<span class="my-tag">value1</span>
</td>
所以如果 HTML 只包含 1 个值,那么什么都不做
【问题讨论】:
-
除非你正在处理一组永远不会改变的 HTML 文件,否则用正则表达式解析 HTML 是一条悲伤之路。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关原因的示例,请参见 htmlparsing.com/regexes。 使用正确的 HTML 解析模块。请参阅this SO thread,了解如何使用已经编写、测试和调试过的 PHP 模块正确解析 HTML。
标签: php html-parsing preg-match preg-match-all