提问人:zuk1 提问时间:2/27/2009 最后编辑:mickmackusazuk1 更新时间:5/6/2023 访问量:1056
从字符串中的所有 <a> 标签中获取文本
Get text from all <a> tags in string
问:
由于我在正则表达式上完全没用,而且这在过去半个小时里一直困扰着我,我想我会在这里发布这个,因为它可能很简单。
<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
答:
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 表示建议反对 (.*) 并改用独占字符类。
评论