正则表达式按类获取html元素内容

时间:2018-01-15 22:35:33

标签: php regex

我已经看到了一些像这样的问题,接受的答案是使用HTML解析器。但是,如果我必须使用正则表达式(php),我怎么能根据类名获得以下示例中的span文本。

  1. <span class="phone-number" data-id="999" style="{lots of random stuff here}">+61 9900 0000</span>

  2. <span class="email" data-something="xxx" style="{lots of random stuff here}">test@test.com</span>

  3. 所以我的变量将是元素类型和类名。

    凭借我的基本知识,我已经走到了这一步:

    (?<=span class="phone-number")\s+(.*?)(?=<\/span>)

    但包括数据和样式属性。

1 个答案:

答案 0 :(得分:2)

请勿使用正则表达式来解析HTML,而应使用DOMDocumentDOMXPath

<?php
$html = '
<span class="phone-number" data-id="999" style="{lots of random stuff here}">+61 9900 0000</span>
<span class="email" data-something="xxx" style="{lots of random stuff here}">test@test.com</span>
';

$dom = new DOMDocument;
$dom->loadHtml($html);

$xpath = new DOMXPath($dom);

$phone = $xpath->query("//span[contains(@class, 'phone-number')]");
$email = $xpath->query("//span[contains(@class, 'email')]");

echo $phone->item(0)->nodeValue.PHP_EOL; //+61 9900 0000
echo $email->item(0)->nodeValue.PHP_EOL; //test@test.com

/*
// loop if have multiple
foreach ($phone as $value) {
    echo $value->nodeValue;
}
*/

https://3v4l.org/qbVaS