简单的RegEx PHP

时间:2009-02-26 17:20:55

标签: php regex

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

<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

5 个答案:

答案 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)

我发现this regular expression tester有帮助。

答案 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>/';