繁体   English   中英

使用PHP的preg_match_all提取URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM