因为我在正则表达式上完全没用,这已经困扰了我半个小时了,我想我会把它贴在这里,因为它可能很简单。
<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>标签之间的内容示例:
<a>
hey.exe hey2.dll pomp.jpg
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);
yquaqz182#
这似乎起作用:
$pattern = '/<a.*?>(.*?)<\/a>/';
xpcnnkqh3#
<a href="[^"]*">([^<]*)</a>
pb3skfrl4#
这里有一个非常简单的例子:
<a.*>(.*)</a>
但是,如果在同一行中有多个匹配项,则应小心。
<a href="/folder/hey">hey.exe</a><a href="/folder/hey2/">hey2.dll</a>
在这种情况下,正确的正则表达式应该是:
<a.*?>(.*?)</a>
注意量词“*”后面的“?”。默认情况下,量词是贪婪的,这意味着它们会吃掉尽可能多的字符(这意味着在本例中它们只返回“hey2.dll”)。通过附加一个引号,您可以使它们不贪婪,这应该更适合您的需要。
4条答案
按热度按时间yk9xbfzb1#
避免使用'.*',即使你不贪婪,直到你有更多的实践与RegEx。我认为对你来说一个好的解决方案是:
注意'/'分隔符-您必须在PHP中使用regex函数的preg套件。它看起来像这样:
yquaqz182#
这似乎起作用:
xpcnnkqh3#
<a href="[^"]*">([^<]*)</a>
pb3skfrl4#
这里有一个非常简单的例子:
但是,如果在同一行中有多个匹配项,则应小心。
在这种情况下,正确的正则表达式应该是:
注意量词“*”后面的“?”。默认情况下,量词是贪婪的,这意味着它们会吃掉尽可能多的字符(这意味着在本例中它们只返回“hey2.dll”)。通过附加一个引号,您可以使它们不贪婪,这应该更适合您的需要。