使用正则表达式和PHP匹配松散形成的URL?

时间:2010-10-14 14:24:06

标签: php regex url

我正在尝试在一组文本中识别网址。但是,我希望能够找到松散形成的网址,例如:

example.com
www.example.com

我不是很擅长正则表达式:(

我发现了下面的模式,但不幸的是它需要这个方案。

/(([[:alnum:]]+:\/\/)|www\.)([^[:space:]]*)([[:alnum:]#?\/&=])/i

是否可以匹配包含.com或.net或.org等的整个字符串(无空格)?

由于

3 个答案:

答案 0 :(得分:0)

存在误报的风险,但很少。所以你确实可以使用类似的东西:

/\b(([-\w]{2,}\.)+(com|net|org|info)|www(\.\w{3,})+\.\w{2,6})\b/i

上半部分用于普通的.com / .net域名,第二部分用www匹配所有内容。字首。如果您想要将这些域名另外检测到完整的http:// urls,则会更加困难。

答案 1 :(得分:0)

~(?:https?://)?(?:[-\w]+\.)+[a-z]{2,6}[^\s]*~

Regex@Rubular

答案 2 :(得分:0)

仅匹配任何不包含空格且以“.com”,“。net”或“.org”结尾的字符串:

/[^\s]+\.(?:com|net|org)\b/i

说明:

  • / =开始使用正则表达式
  • [^\s] =不是(^)一个空格(\s)字符
  • + =前面一组中的一个或多个(非空白字符)
  • \. =一个点。 RegExps中的点是特殊字符,否则
  • (?: ... ) =一个群组,但不是一个要存储的群组
  • com|net|org = comnetorg(您可以在这里添加更多内容,以“|”分隔)
  • \b =单词边界 - 单词的结尾
  • / =正则表达式的结尾(除了可选标记)
  • i =对案例不敏感

答复的延伸

根据OP的请求,下面是一个(粗略)RegExp,它应匹配以指定字符串结尾的域的URL,以及查询字符串中的一个或多个key = value对。

/[^\s]+\.(?:com|net|org)[^\s]+\?[^\s]+=[^\s]+(?:\&?[^\s]+=[^\s]+)*\b/i
  • / =开始使用正则表达式
  • [^\s]+\.(?:com|net|org) =和以前一样
  • [^\?]+ =一个或多个非问号字符(这可能是任何文件夹或文件名)。同样,问号标记前面有一个\,它被视为普通字符,否则,它具有特殊含义
  • \? =问号
  • [^\s]+\=[^\s]+ =一个或多个非空格,然后是等号,然后是一个或多个非空格
  • (?:\&?[^\s]+=[^\s]+)* =没有或多组&符号&,然后是另一个或多个非空格,等号和一个或多个非空格
  • \b =字符串结尾
  • / =正则表达式结束
  • i =对案例不敏感

注意:这不会查找完全有效的网址,也不会包含大量国家/地区代码(例如澳大利亚的“.com.au”)或其他顶级域名(例如'.edu'等。)但是,它将匹配 twitter.com/example?var=true

提供的示例字符串