我的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是如何工作的以及反斜杠的含义以及它所具有的所有其他东西。
答案 0 :(得分:2)
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.com,RegExr.com
要将它们合并到PHP脚本中,您可以使用preg_*
函数 - preg_match()
,preg_match_all()
,preg_split()
和preg_grep()
。
答案 1 :(得分:0)
查看SIMPLE HTML DOM的手册。我相信这会对你有所帮助:Documentation 仔细阅读所有内容。