PHP正则表达式将子匹配返回为数组

PHP正则表达式将子匹配返回为数组,php,arrays,regex,function,dom,Php,Arrays,Regex,Function,Dom,我有一个关于正则表达式的问题 我想做的是只使用一个正则表达式来匹配字符串的一部分,并找出其中的内容。我不知道如何解释,所以我会写一个例子 要解析的html示例 <div class="test"> <span>a</span> <span>b</span> <span>c</span> <span>d</span> </div> <div

我有一个关于正则表达式的问题

我想做的是只使用一个正则表达式来匹配字符串的一部分,并找出其中的内容。我不知道如何解释,所以我会写一个例子

要解析的html示例

<div class="test">
    <span>a</span>
    <span>b</span>
    <span>c</span>
    <span>d</span>
</div>
<div class="test2">
    <span>aa</span>
    <span>bb</span>
    <span>cc</span>
    <span>dd</span>
</div>
这就是你想要的吗:


/([^使用
DOMParser
而不是正则表达式

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('div') as $tag) {
    if ($tag->getAttribute('class') === 'test')
    {
        foreach($tag->getElementsByTagName('span') as $stag)
        {
        $val[]=$stag->nodeValue;
        }
    }
}
print_r($val);
使用XPath查询..(对于相同的查询)
输出:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)


我只想要div与.test的匹配,而不是.test2Nice解决方案中的匹配,但我正在从站点中删除一些,这并不总是一样的。因此,即使在这种情况下,也可能会有所不同。您能发布您的预期输出吗?我知道DOM。但我想更多地了解这样的正则表达式是否可行。这个问题如果存在这样的正则表达式,则更多。我将使用预期的outputFine编辑qeustin。同时,请阅读我们的Jeff Atwood的文章。其中说明了为什么不应使用正则表达式解析HTML。大约有60个不同的模板。不同的定位根据条目类型而可靠。我必须从缓存中取出数据,因为整个数据库都丢失了,缓存也丢失了只是剩下的部分。只有地址/类型/名称等部分是相同的。为每个模板编写DOM walker需要很长时间。脚本不会每天都使用,也不会以任何形式分发。因此,它是一次脚本获取数据,将解析600页并将其删除。这就是为什么我决定使用preg_match而不是DOM
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('div') as $tag) {
    if ($tag->getAttribute('class') === 'test')
    {
        foreach($tag->getElementsByTagName('span') as $stag)
        {
        $val[]=$stag->nodeValue;
        }
    }
}
print_r($val);
$xpath = new DOMXpath($dom);
$elements = $xpath->query("*/div[@class='test']/span");
foreach($elements as $v)
{
    $arr[]=$v->nodeValue;
}
print_r($arr);
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)