我已经看到了一些像这样的问题,接受的答案是使用HTML解析器。但是,如果我必须使用正则表达式(php),我怎么能根据类名获得以下示例中的span
文本。
<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>
所以我的变量将是元素类型和类名。
凭借我的基本知识,我已经走到了这一步:
(?<=span class="phone-number")\s+(.*?)(?=<\/span>)
但包括数据和样式属性。
答案 0 :(得分:2)
请勿使用正则表达式来解析HTML,而应使用DOMDocument和DOMXPath。
<?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;
}
*/