PHP正则表达式将子匹配返回为数组
我有一个关于正则表达式的问题 我想做的是只使用一个正则表达式来匹配字符串的一部分,并找出其中的内容。我不知道如何解释,所以我会写一个例子 要解析的html示例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
<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
)