由于我在正则表达式上完全没用,而且这在过去的半个小时里一直困扰着我,我想我会在这里发布它,因为它可能很简单。
<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
答案 0 :(得分:6)
在你使用RegEx进行更多练习之前,即使你不成功也要避免使用'。*'。我认为一个很好的解决方案是:
'/<a[^>]+>([^<]+)<\/a>/i'
注意'/'分隔符 - 您必须在PHP中使用preg的regex函数套件。它看起来像这样:
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);
答案 1 :(得分:2)
<a href="[^"]*">([^<]*)</a>
答案 2 :(得分:2)
答案 3 :(得分:2)
这是一个非常简单的问题:
<a.*>(.*)</a>
但是,如果您在同一行中有多个匹配项,则应该小心,例如
<a href="/folder/hey">hey.exe</a><a href="/folder/hey2/">hey2.dll</a>
在这种情况下,正确的正则表达式将是:
<a.*?>(.*?)</a>
注意'?'在'*'量词之后。默认情况下,量词是贪婪的,这意味着他们尽可能多地吃掉字符(这意味着他们在这个例子中只返回“hey2.dll”)。通过附加引号,你可以使它们不合适,这样可以更好地满足你的需求。
答案 4 :(得分:2)
这似乎有效:
$pattern = '/<a.*?>(.*?)<\/a>/';