我一直在努力做下面的工作。基本上,我希望能够从HTML模板中包含的表达式中提取URL,如下所示:
{rssfeed:url(http://www.example.com/feeds/posts/default)}
这个想法是,当找到它时,提取URL,并使用RSS提要解析器获取RSS并将其插入此处。例如,如果我在PHP代码中对URL进行硬编码,这一切都有效,但我只需要弄清楚这个正则表达式,这样模板实际上足够灵活,可以在很多情况下使用。
我已经尝试了至少十种不同的正则表达式,大部分都在SO上找到,但没有一种正在运行。正则表达式甚至不需要验证URL;我只是想找到它并提取它,URL的分隔符也不需要是parens。
谢谢!
答案 0 :(得分:4)
这对你有用吗?
'@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@'
我用它来匹配文字中的网址。
示例:强>
$subject = "{rssfeed:url(http://www.example.com/feeds/posts/default)}";
$pattern ='@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@';
preg_match_all($pattern, $subject, $matches);
print($matches[1][0]);
<强>输出:强>
http://www.example.com/feeds/posts/default
注意:强>
还有一篇关于Daring Fireball的文章,名为An Improved Liberal, Accurate Regex Pattern for Matching URLs,对你来说很有意思。
答案 1 :(得分:2)
/\{rssfeed\:url\(([^)]*)\)\}/
preg_match_all('/\{rssfeed\:url\(([^)]*)\)\}/', '{rssfeed:url(http://www.example.com/feeds/posts/default)}', $matches, PREG_PATTERN_ORDER);
print_r($matches[1]);
您应该能够获得$matches[1]
..
注意:这只会获得{rssfeed:url()}
格式的网址,而不是内容中的所有网址。