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

dfddblmv  于 2023-05-08  发布在  其他
关注(0)|答案(4)|浏览(235)

因为我在正则表达式上完全没用,这已经困扰了我半个小时了,我想我会把它贴在这里,因为它可能很简单。

<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
yk9xbfzb

yk9xbfzb1#

避免使用'.*',即使你不贪婪,直到你有更多的实践与RegEx。我认为对你来说一个好的解决方案是:

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

注意'/'分隔符-您必须在PHP中使用regex函数的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);
yquaqz18

yquaqz182#

这似乎起作用:

$pattern = '/<a.*?>(.*?)<\/a>/';
xpcnnkqh

xpcnnkqh3#

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

pb3skfrl

pb3skfrl4#

这里有一个非常简单的例子:

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

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

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

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

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

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

相关问题