preg_match如何使用simple_html_dom.php为HTML工作?

时间:2014-03-08 17:43:22

标签: php html

我的html代码看起来像这样

<div class="address adr">
    <span class="street-address"><span class="no_ds> CONTENT1</span>
        <span class="postal-code">CONTENT2</span>
        <span class="locality">CONTENT3</span>
    /span>
</div>

<div class="phone tel">
    <span class="no_ds">CONTENT4</span>
<div>

我可以使用preg_match来获取两者的div类,同时获取两者中的内容吗?

好吧,我想知道的是preg_match是如何工作的以及反斜杠的含义以及它所具有的所有其他东西。

2 个答案:

答案 0 :(得分:2)

使用PHP解析HTML

HTML不是常规语言,无法使用正则表达式正确解析。使用HTML解析器来实现此目的。在PHP中,默认情况下您可以使用DOMDocument类。有关可用于解析和处理HTML的库的详尽列表,请参阅this question

以下是使用<div>类提取DOMDocument类名称的方法:

$html = <<<HTML
<div class="address adr">
    <span class="street-address"><span class="no_ds"> CONTENT1</span>
        <span class="postal-code">CONTENT2</span>
        <span class="locality">CONTENT3</span>
    /span>
</div>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('div') as $tag) {
    echo $tag->getAttribute('class'), PHP_EOL;
}

输出:

address adr

使用HTML解析器,您可以以任何方式解析/操作HTML,并且确保它可以正常工作。正则表达式不是这种情况。当属性的顺序发生变化时,正则表达式可能会中断。当您具有可以递归定义的嵌套属性时,正则表达式可能会失败,而HTML解析器则不会。

学习正则表达式

正则表达式非常宽泛,不能在一个答案中解释。如果你想学习正则表达式,我建议你开始从像Regular-Expressions.info这样的合适资源中学习。

为了测试正则表达式,您可以使用在线测试人员,例如Regex101.comRegExr.com 要将它们合并到PHP脚本中,您可以使用preg_*函数 - preg_match()preg_match_all()preg_split()preg_grep()

答案 1 :(得分:0)

查看SIMPLE HTML DOM的手册。我相信这会对你有所帮助:Documentation 仔细阅读所有内容。