正则表达式匹配url的一种思路

原创 2015年03月13日 11:10:53

背景是是搜集一类网站的url。可以在几个网站中找到相关链接。一个个打开复制太麻烦,于是就考虑在源代码中提取出其中的url。

于是将页面源代码保存到url.txt文件中后,通过如下脚本通过正则表达式过滤出其中的url。

#! /usr/bin/perl
use warnings;
@strs=`cat ./url.txt`;
foreach (@strs){
	if(/(https?.*?\.(:?cn\b|com\b|net\b|org\b|gov\b)(?!\.))/)
		{print "$1\n";}
}
通过观察,页面源码中的url都含有一下特点。

1.http或者https开头。(这个特别棒,省了不少事)

2.中间是一段任意字符串

3.结尾处是知名的顶级域


然后写出正则表达式如下

(https?.*?\.(:?cn\b|com\b|net\b|org\b|gov\b)(?!\.))

详细解释下:

http:先是匹配http

s? :可有可无的s

.*? :以非贪婪的模式匹配任意长度的任意字符。 “.''表示任意字符,” *?“表示非贪婪模式匹配任意长度。如果使用贪婪模式,会出现很多意外情况。

\. :匹配点符号,因为"."在正则中表示任意字符,所以想要匹配”."本身需要用”\“进行转义

(:? ) :其实就是简单的括号,改变下优先级,加上”:?“ 是以为perl中会将()内的匹配到的字符串存储到相应变量中,而加上(:?)则不会储存。

cn\b|com\b :匹配不在字符串中间的cn或者com。之后的net,org,gov也都一样。

(?!\.):这是个零宽断言,就是说前面的cn,com字符串后面没有点。这是为了避免www.ujn.edu.cn这样的,只匹配出www.ujn.edu,丢掉后面的cn。




网上有跟多匹配各种类型的url的表达式,小弟才疏学浅,大部分都看不懂,自己写个简简单单的,符合自己要求的随便用用,需要的拿去。求别喷。

超强匹配url地址的正则表达式

这个匹配url地址的正则表达式是我们为了过滤帖子里面的外部url地址而专门写的用来匹配所有的url地址的正则表达式。是经过了千锤百炼,经过事实检测的超强正则表达式。可以匹配所有的地址(若哪位GG有这个...
  • Damon_King
  • Damon_King
  • 2008年04月29日 09:42
  • 57986

使用正则表达式对URL进行解析

对URL进行解析,一般用到的参数有: 1、协议 如http,https 2、域名或IP 3、端口号,如7001,8080 4、Web上下文 5、URI,请求资源地址 6、请求参数 一个URL示例: h...
  • hongweigg
  • hongweigg
  • 2014年10月31日 19:59
  • 11774

正则匹配URL中的参数

如匹配nickname参数 规则:(^|&)nickname=([^&]*)
  • meimeieee
  • meimeieee
  • 2017年02月14日 14:32
  • 1125

正则表达式匹配URL

最近在做一些关于URL匹配的项目,本来对正则表达式了解的不多,上网搜索了好多前辈写的正则表达式,发现很少能被我使用的,现将我自己写的正则表达式贴出来,供大家参考。 %% 首先,正则表达式:   ...
  • weasleyqi
  • weasleyqi
  • 2012年08月27日 16:35
  • 116071

匹配URL的正则表达式解析

看到两篇关于url正则的不错文章 正则表达式匹配URL 正确匹配URL的正则表达式 第一篇属于比较正常通用的思维,匹配url的各个部分,ip形式、端口等;第二篇比较抽象,个人理解应该是作者默认...
  • t_1007
  • t_1007
  • 2016年08月23日 18:47
  • 9940

C++ 正则获取url中参数

转自:http://www.cnblogs.com/wuhanqing/p/4575690.html 在访问网页过程中,为了识别所做操作或者访问对象的编号,大多是用Get方式进行提交网页。所...
  • bsmmaoshenbo
  • bsmmaoshenbo
  • 2016年05月10日 17:52
  • 2026

在安卓开发中使用正则表达式,高效率开发

在Style里面快速生成你的自己定义样式, 1.首先CTRL+F 在里面输入以下正则表达式 2.在这里勾中Regular expressions 3.选中你要生成的item, 4....
  • feelingsBoy
  • feelingsBoy
  • 2016年09月04日 00:53
  • 296

正则表达式的效率

判断航空公司二字码是否正确的方法: 普通的判断: private boolean strMatch(String str){                  if(str == null || ""...
  • z278718149
  • z278718149
  • 2014年12月04日 14:23
  • 1415

使用python和正则表达式获取url,及总结

今天boss给了新需求,让我们根据之前的抓取网页的程序抓取所需的网页,然后再对该网页的源代码进行分析,获取指定标签的url。boss让我们先使用正则表达式和python去实现这个功能。 在程序编写的...
  • uestcyao
  • uestcyao
  • 2012年08月14日 21:41
  • 6834

Java正则表达式匹配URL中的host

public static String getHost(String url) { if (url == null || url.trim().equals("")) { return "...
  • ywb201314
  • ywb201314
  • 2016年05月12日 10:40
  • 1082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正则表达式匹配url的一种思路
举报原因:
原因补充:

(最多只允许输入30个字)