一个正则表达式的例子
2009-12-25 15:38
148 查看
/* from: http://topic.csdn.net/u/20090712/17/d40e7153-d6d1-4a65-b20e-5ad6f92533a3.html */
需求:
通过.net的正则 http://www.aa.bb.com htp://aa.bb.com
aa.bb.com
上面3个都得到 aa
并对语句稍微讲解一下。谢谢。
(? <=http://)(/w+) 这个是我写的。不知道怎么加上或者匹配www
还有? <= 这个什么意思查不到。
解决:
(?i) 匹配模式,表示忽略大小写,在.NET中等价于在后面加RegexOptions.IgnoreCase参数
(? <=^|http://(?:www/.)?) 肯定逆序环视,语法(? <=Exp),最终匹配到的只是一个位置,相当于在所在位置的左侧附加了一个条件,表示所在位置左侧必须能够匹配Exp
用在这里就表示左侧必须是字符串开始位置^,或者以http://(?:www/.)?开头,其中www.可有可无
(?!www/.) 否定顺序环视,语法(?!Exp),同上,匹配的只是一个位置,相当于在所在位置的右侧附加一个条件,表示所在位置右侧必须不能匹配Exp
用在这里是因为前面的www.是可有可无的,如果不加这个条件限定,那么最后一个例子 http://www.bb.com 将会匹配到www
在正则表达式尝试匹配到http://后的位置时,条件(? <=^|http://(?:www/.)?)中www.是可有可无的,所以也是满足的,这样后面的/b/w+就会匹配到www.,所以要加(?!www/.)这样一个条件,使这个位置的右侧不能是www.
/b/w+ /b单词边界,/w相当于[a-zA-Z0-9_]
/b限定取到的内容是开始位置,或:,或.与.之间完整的内容,而不是部分子串
还是最后的那个例了 http://www.bb.com 前面(? <=^|http://(?:www/.)?)(?!www/.)的条件限定,使得http://w以前的位置都不符合条件,在第一个w后的位置是满足以上条件的,如果这里不用/b限制,则/w+就可以匹配到ww,这个结果显然是错误的
域名的通用规则是a-zA-Z0-9_组成,其实还有一个“-”,/w在.NET中如果没有加RegexOptions.ECMAScript参数,那么还可以匹配一些本地字符集,如中文,全角数字等,所以用在这里并不是很合适,可以把表达式中的/w替换为[a-zA-Z0-9_-]
(?!/./w+$) 这个条件主要是用来限定右侧不能只有一个.com之类的域我,也就是要排除www.bb.com这种域名
(?=(?:/./w+)+) 这个条件主要是用来限定右侧要符合多个./w+这样的规则,如果能保证传过来的参数符合域名规则,这个条件可以去掉
关于环视,可以参考一下我的博客,目前只写了几篇,后续会陆续增加
正则基础之——环视
lxcnn (过客) 的正则确实厉害,学习地址:http://blog.csdn.net/lxcnn
需求:
通过.net的正则 http://www.aa.bb.com htp://aa.bb.com
aa.bb.com
上面3个都得到 aa
并对语句稍微讲解一下。谢谢。
(? <=http://)(/w+) 这个是我写的。不知道怎么加上或者匹配www
还有? <= 这个什么意思查不到。
解决:
(?i)(?<=^|http://(?:www/.)?)(?!www/.)/b/w+(?!/./w+$)(?=(?:/./w+)+)
(?i) 匹配模式,表示忽略大小写,在.NET中等价于在后面加RegexOptions.IgnoreCase参数
(? <=^|http://(?:www/.)?) 肯定逆序环视,语法(? <=Exp),最终匹配到的只是一个位置,相当于在所在位置的左侧附加了一个条件,表示所在位置左侧必须能够匹配Exp
用在这里就表示左侧必须是字符串开始位置^,或者以http://(?:www/.)?开头,其中www.可有可无
(?!www/.) 否定顺序环视,语法(?!Exp),同上,匹配的只是一个位置,相当于在所在位置的右侧附加一个条件,表示所在位置右侧必须不能匹配Exp
用在这里是因为前面的www.是可有可无的,如果不加这个条件限定,那么最后一个例子 http://www.bb.com 将会匹配到www
在正则表达式尝试匹配到http://后的位置时,条件(? <=^|http://(?:www/.)?)中www.是可有可无的,所以也是满足的,这样后面的/b/w+就会匹配到www.,所以要加(?!www/.)这样一个条件,使这个位置的右侧不能是www.
/b/w+ /b单词边界,/w相当于[a-zA-Z0-9_]
/b限定取到的内容是开始位置,或:,或.与.之间完整的内容,而不是部分子串
还是最后的那个例了 http://www.bb.com 前面(? <=^|http://(?:www/.)?)(?!www/.)的条件限定,使得http://w以前的位置都不符合条件,在第一个w后的位置是满足以上条件的,如果这里不用/b限制,则/w+就可以匹配到ww,这个结果显然是错误的
域名的通用规则是a-zA-Z0-9_组成,其实还有一个“-”,/w在.NET中如果没有加RegexOptions.ECMAScript参数,那么还可以匹配一些本地字符集,如中文,全角数字等,所以用在这里并不是很合适,可以把表达式中的/w替换为[a-zA-Z0-9_-]
(?!/./w+$) 这个条件主要是用来限定右侧不能只有一个.com之类的域我,也就是要排除www.bb.com这种域名
(?=(?:/./w+)+) 这个条件主要是用来限定右侧要符合多个./w+这样的规则,如果能保证传过来的参数符合域名规则,这个条件可以去掉
关于环视,可以参考一下我的博客,目前只写了几篇,后续会陆续增加
正则基础之——环视
lxcnn (过客) 的正则确实厉害,学习地址:http://blog.csdn.net/lxcnn
相关文章推荐
- 一个正则表达式的例子
- 一个用javascript编写的表单提交的例子(包括用正则表达式对数据进行验证)
- 一个小爬虫和正则表达式的例子,用于获取2015年迅雷校招的笔试名单
- 一个匹配URL的正则表达式例子(带详细解释)
- 一个简单的java正则表达式例子
- Notepad++里面正则表达式反向引用和替换的一个例子
- javascript:正则表达式、一个表单验证的例子
- Java中正则表达式的一个简单例子
- python正则表达式--基本用法和函数(一个例子)
- 正则表达式匹配的一个例子
- 用 正则表达式 判断一个简单的用户登陆的例子
- 一个简单的例子区分linux shell 正则表达式中的 *,+,?
- ActionScript 3.0 学习(九) AS3 一个应用正则表达式替换字符串的例子
- 一个正则表达式的例子
- 给新手一个python正则表达式的入门例子
- 一个java正则表达式的小例子
- java中使用正则表达式校验的一个例子
- Java 小例子:一个测试正则表达式的工具
- 应用Notepad++的正则表达式完成较复杂替换的一个小例子
- Java中正则表达式的一个简单例子