PHP正则表达式preg_match_all div不相同id
我有一个像这样的html页面PHP正则表达式preg_match_all div不相同id,php,jquery,html,css,regex,Php,Jquery,Html,Css,Regex,我有一个像这样的html页面 <!DOCTYPE html> <html> .... <body> <div class="list-news fl pt10 "> Blue </div> <div class="list-news fl pt10 alternative">
<!DOCTYPE html>
<html>
....
<body>
<div class="list-news fl pt10 ">
Blue
</div>
<div class="list-news fl pt10 alternative">
Yellow
</div>
<div class="list-news fl pt10 ">
Red
</div>
<div class="list-news fl pt10 alternative">
Cyan
</div>
<div class="list-news fl pt10 ">
Black
</div>
<div class="list-news fl pt10 alternative">
White
</div>
</body>
</html>
现在,我将编写一个排序php代码来获取我需要的所有内容
preg_match_all('@<div class="list-news fl pt10 .*?">(.*?)<div class="list-news fl pt10 .*?">@s',$rs,$match);
这就是结果
[1] => Array
(
[0] => <div>Blue</div></div>
[1] => <div>Red</div></div>
[2] => <div>Black</div></div>
)
结果仅显示div中的内容,不获取div中的内容,我可以使用str_replace删除可选类,但如果不替换此字符串,如何获取每个div匹配类列表news fl pt10中的所有内容。*
感谢您的想法。一种简单的方法包含:
或没有:
一种简单的方法包括:
或没有:
改为使用php DOM扩展并按XPath搜索您的正则表达式(顺便说一句)在关闭前不匹配改为使用php DOM扩展并按XPath搜索您的正则表达式(顺便说一句)在关闭前不匹配
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$query = <<<'EOD'
//div[
contains(@class, 'list-news') and
contains(@class, 'fl') and
contains(@class, 'pt10')]
EOD;
$nodes = $xpath->query($query);
$results = array();
foreach ($nodes as $node) {
$results[] = trim($node->textContent);
}
print_r($results);
preg_match_all('~<div class="list-news fl pt10\b[^>]+>\s*\K.*?(?=\s*</div>)~',
$html, $matches);
print_r($matches[0]);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$query = '//div[@class]';
$nodes = $xpath->query($query);
$results = array();
foreach($nodes as $node) {
if ( preg_match('~(?:\s|^)list-news\s+fl\s+pt10(?:\s|$)~',
$node->getAttribute('class')) )
$results = trim($node->textContent);
}
$dom = new DOMDocument();
@$dom->loadHTML($html);
$divs = $dom->getElementsByTagName('div');
$results = array();
foreach($divs as $node) {
if ( $node->hasAttribute('class') &&
preg_match('~(?:\s|^)list-news\s+fl\s+pt10(?:\s|$)~',
$node->getAttribute('class')) )
$results = trim($node->textContent);
}