Php 从字符串中提取Span和href数据

Php 从字符串中提取Span和href数据,php,regex,Php,Regex,我有一些这种格式的HTML字符串 <span>SpanText</span> <a href="link.html" title="link">Link Text</a> SpanText 我使用这个regexp来提取数据 $regexp = "<span>(.*)<\/span><a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<

我有一些这种格式的HTML字符串

   <span>SpanText</span>
   <a href="link.html" title="link">Link Text</a>
SpanText
我使用这个regexp来提取数据

   $regexp = "<span>(.*)<\/span><a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
   preg_match_all("/$regexp/siU", $string, $matches, PREG_SET_ORDER);
$regexp=“(.*)]*href=(\”?)([^\”>]*?)\\1[^>]*>(.*);
preg_match_all(“/$regexp/siU”,$string,$matches,preg_SET_顺序);
这不会返回任何结果

regexp一定有问题吧


我想提取span文本和链接文本。

您可以使用正则表达式:

<span>(.*)<\/span>(?:.|\n)*?<a\s[^>]*?href=\"??[^\" >]*?[^>]*>(.*)<\/a>
(.*)(?:.\n)*?

您的代码有问题:


为什么使用
\\1
?(我不明白)

不要使用正则表达式来解析DOM,它不是合适的工具。。。而是使用DOM解析器。。。下面是一个使用PHP简单HTML DOM解析器的示例:

// 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);

有关更多信息,您可以阅读

但是,如果您只处理这段html代码,那么这里可能可以使用regex。。。 因此,您可以尝试以下模式:

/<span>([^<]+)<\/[^<]+<a[^>]+>([^<]+)/g

/([^您正徘徊在一条充满泪水、鲜血和恐怖的道路上。请尽可能地往回走……regexp对于这项工作来说是错误的工具。
/<span>([^<]+)<\/[^<]+<a[^>]+>([^<]+)/g