从字符串中提取跨度和HREF数据



我有一些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

最新更新