[英]Using PHP's preg_match_all to extract a URL
我一直在努力进行以下工作。 基本上,我希望能够从HTML模板中包含的表达式中提取URL,如下所示:
{rssfeed:url(http://www.example.com/feeds/posts/default)}
想法是,找到该URL后,将提取URL,并使用RSS feed解析器获取RSS并将其插入此处。 例如,如果我在PHP代码中对URL进行了硬编码,那么这一切都可行,但是我只需要弄清楚这个正则表达式即可,因此模板实际上足够灵活,可以在许多情况下使用。
我已经尝试了至少十种不同的正则表达式,大多数都在SO上找到,但是都没有用。 正则表达式甚至不需要验证URL。 我只想找到它并提取它,URL的分隔符也不需要被parens。
谢谢!
能为您工作吗?
'@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@'
我用它来匹配文本中的URL。
例:
$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上也有一篇不错的文章,名为“改进的自由,准确的正则表达式模式,用于匹配URL” ,这可能对您很有趣。
/\\{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]
可用内容的所有URL。
注意:这只会获得{rssfeed:url()}
格式的网址,而不是内容中的所有网址。
您可以在这里尝试: http : //www.spaweditor.com/scripts/regex/index.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.