从字符串中的所有 <a> 标签中获取文本

Get text from all <a> tags in string

提问人:zuk1 提问时间:2/27/2009 最后编辑:mickmackusazuk1 更新时间:5/6/2023 访问量:1056

问:

由于我在正则表达式上完全没用,而且这在过去半个小时里一直困扰着我,我想我会在这里发布这个,因为它可能很简单。

<a href="/folder/files/hey/">hey.exe</a>
<a href="/folder/files/hey2/">hey2.dll</a>
<a href="/folder/files/pomp/">pomp.jpg</a>

在PHP中,我需要提取标签示例之间的内容:<a>

hey.exe
hey2.dll
pomp.jpg
php 正则表达式 html 解析 文本提取

评论

0赞 mickmackusa 5/6/2023
相关:查找 <a> 和 </a> 标签中的文本

答:

2赞 Douglas Leeder 2/27/2009 #1

<a href="[^"]*">([^<]*)</a>

2赞 Luc Touraille 2/27/2009 #2

这是一个非常简单的方法:

<a.*>(.*)</a>

但是,如果您在同一行中有多个匹配项,则应小心,例如

<a href="/folder/hey">hey.exe</a><a href="/folder/hey2/">hey2.dll</a>

在这种情况下,正确的正则表达式是:

<a.*?>(.*?)</a>

请注意“*”量词后面的“?”。默认情况下,量词是贪婪的,这意味着它们会尽可能多地吃掉字符(这意味着在此示例中它们只会返回“hey2.dll”)。通过附加引号,您可以使它们变得不透明,这应该更符合您的需求。

2赞 Chad Birch 2/27/2009 #3

这似乎有效:

$pattern = '/<a.*?>(.*?)<\/a>/';
6赞 robmerica 2/27/2009 #4

避免使用“.*”,即使你把它弄得不干净,直到你对正则表达式进行了更多的练习。我认为对您来说,一个好的解决方案是:

'/<a[^>]+>([^<]+)<\/a>/i'

请注意“/”分隔符 - 您必须在 PHP 中使用正则表达式函数的 preg 套件。它看起来像这样:

preg_match_all($pattern, $string, $matches);
// matches get stored in '$matches' variable as an array
// matches in between the <a></a> tags will be in $matches[1]
print_r($matches);

评论

0赞 Tomalak 2/27/2009
+1 表示建议反对 (.*) 并改用独占字符类。