分析器例如:
$string = '<h3 class="lvtitle"><a href="http://www.ebay.com/itm/Chicago-Chicago-XXX-Audio-CD-/351478948979?hash=item51d5c72473" class="vip" title="Click this link to access Chicago, Chicago XXX Audio CD">Chicago, Chicago XXX Audio CD</a></h3>';
$doc = new DOMDocument(); //make a dom object
$doc->loadHTML($string); // load the string into the object
$links = $doc->getElementsByTagName('a'); //get all links
foreach ($links as $link) { //loop through all links
echo $link->nodeValue; //output text content of links
}
输出:
,芝加哥XXX音频CD
参考文献:
http://php.net/manual/en/domelement.getelementsbytagname.php
http://php.net/manual/en/domdocument.loadhtml.php
...或者,如果你真的需要一个正则表达式出于某种原因(我不t看看解析器为什么不起作用)...
$string = '<h3 class="lvtitle"><a href="http://www.ebay.com/itm/Chicago-Chicago-XXX-Audio-CD-/351478948979?hash=item51d5c72473" class="vip" title="Click this link to access Chicago, Chicago XXX Audio CD">Chicago, Chicago XXX Audio CD</a></h3>';
preg_match_all('~<a\h.*?>(.*?)</a>~', $string, $links_content);
print_r($links_content[1]);
输出:
Array
(
[0] => Chicago, Chicago XXX Audio CD
)
~
=定界符
<a
=字面上匹配<a
\h
=水平空白
.*?
=任何取消平铺的下一个字符
>
的第一次出现=字面>
(.*?)
=捕获分组捕获所有内容直到再次出现下一个字符
</a>
=字面</a>
~
=结束分隔符
如果你喜欢regex101写上去,https://regex101.com/r/sT6yA9/1。
还请注意preg_match_all
这是因为您的字符串中有多个链接。只需一次,您就可以使用preg_match
。
尝试新鲜事物? – anubhava
使用html解析器 –
是的,我尝试了一个有用的函数来获取标签之间的字符串,但在这种情况下不起作用。 –