我有一些html字符串,这种格式
<span>SpanText</span>
<a href="link.html" title="link">Link Text</a>
我使用此定致的数据
提取数据 $regexp = "<span>(.*)</span><as[^>]*href=("??)([^" >]*?)\1[^>]*>(.*)</a>";
preg_match_all("/$regexp/siU", $string, $matches, PREG_SET_ORDER);
这一无所获。
REGEXP必须有问题?
我想提取跨度文本和链接文本。
您可以使用正则:
<span>(.*)</span>(?:.|n)*?<as[^>]*?href="??[^" >]*?[^>]*>(.*)</a>
演示
您的代码问题:
为什么使用\1
?(我不明白)
请勿使用正则表达式来解析dom,它不是适当的工具...而不是使用dom parser ...这是一个示例,其中是 php php simple html html html dom parser :
// includes Simple HTML DOM Parser
include "simple_html_dom.php";
$input = '
<span>SpanText</span>
<a href="link.html" title="link">Link Text</a>
';
//Create a DOM object
$html = new simple_html_dom();
// Load HTML from a string
$html->load($input);
// Retrieve the text from elements
$span = $html->find('span',0)->plaintext;
$anchor = $html->find('a',0)->plaintext;
echo "$span - $anchor";
// Clear DOM object
$html->clear();
unset($html);
输出
SpanText - Link Text
工作演示
有关更多信息,您可以在PHP上阅读更多信息HTML DOM PARSER手册
但是,如果您仅处理此HTML代码,则可以在此处使用Regex ...因此,您可以尝试此模式:
/<span>([^<]+)</[^<]+<a[^>]+>([^<]+)/g
live demo