用正则表达式来搜索
正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。
这段时间在建设无锡百科中的无锡保洁公司大全目录,一个人的力量是渺小的,但能正确利用工具,把效率提高,那力量可是强大的,这不,用Teleport Pro花了2个小时时间,下载了30个相关的保洁公司网站,这可是建立百科的第一步,结果发现用此工具下载的网站里面所有的图片,连接,只要用上调用外部资源的都给加上 tppabs=”****” 等不规则标签,这可难住了,利用普通查找替换由于”****”部分各不相同,所以无法进行。
有问题,找GOOGLE
答案马上来了,利用正则表达式的匹配功能进行,详细如下:
一些不便书写的字符,采用在前面加 “\” 的方法。这些字符其实我们都已经熟知了。
| 表达式 | 可匹配 |
| \r, \n | 代表回车和换行符 |
| \t | 制表符 |
| \\ | 代表 “\” 本身 |
还有其他一些在后边章节中有特殊用处的标点符号,在前面加 “\” 后,就代表该符号本身。比如:^, $ 都有特殊意义,如果要想匹配字符串中 “^” 和 “$” 字符,则表达式就需要写成 “\^” 和 “\$”。
| 表达式 | 可匹配 |
| \^ | 匹配 ^ 符号本身 |
| \$ | 匹配 $ 符号本身 |
| \. | 匹配小数点(.)本身 |
正则表达式中的一些表示方法,可以匹配 ‘多种字符’ 其中的任意一个字符。比如,表达式 “\d” 可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。这就好比玩扑克牌时候,大小王可以代替任意一张牌,但是只能代替一张牌。
| 表达式 | 可匹配 |
| \d | 任意一个数字,0~9 中的任意一个 |
| \w | 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个 |
| \s | 包括空格、制表符、换页符等空白字符的其中任意一个 |
| . | 小数点可以匹配除了换行符(\n)以外的任意一个字符 |
使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。
| 表达式 | 可匹配 |
| [ab5@] | 匹配 “a” 或 “b” 或 “5″ 或 “@” |
| [^abc] | 匹配 “a”,”b”,”c” 之外的任意一个字符 |
| [f-k] | 匹配 “f”~”k” 之间的任意一个字母 |
| [^A-F0-3] | 匹配 “A”~”F”,”0″~”3″ 之外的任意一个字符 |
使用方法是:”次数修饰”放在”被修饰的表达式”后边。比如:”[bcd][bcd]” 可以写成 “[bcd]{2}”。
| 表达式 | 作用 |
| {n} | 表达式重复n次,比如:”\w{2}” 相当于 “\w\w”;”a{5}” 相当于 “aaaaa” |
| {m,n} | 表达式至少重复m次,最多重复n次,比如:”ba{1,3}”可以匹配 “ba”或”baa”或”baaa” |
| {m,} | 表达式至少重复m次,比如:”\w\d{2,}”可以匹配 “a12″,”_456″,”M12344″… |
| ? | 匹配表达式0次或者1次,相当于 {0,1},比如:”a[cd]?”可以匹配 “a”,”ac”,”ad” |
| + | 表达式至少出现1次,相当于 {1,},比如:”a+b”可以匹配 “ab”,”aab”,”aaab”… |
| * | 表达式不出现或出现任意次,相当于 {0,},比如:”\^*b”可以匹配 “b”,”^^^b”… |
一些符号在表达式中代表抽象的特殊意义:
| 表达式 | 作用 |
| ^ | 与字符串开始的地方匹配,不匹配任何字符 |
| $ | 与字符串结束的地方匹配,不匹配任何字符 |
| \b | 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符 |
以下列举一些常用的正则表达式:
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
匹配上面提到的tppabs=”*****”标签的正则表达式为:\btppabs=”h[^"]*”,
匹配”javascript:if(confirm*****” 的正则表达式为:href=”javascript:if\(confirm\(’htt[^"]*”
匹配<script>开头、以</script>结尾的表达式为:<script[^<>]*>[\W\w]*?</script>
轻松一松,一替换,几秒钟时间,内容全部替换完成。正是磨刀不误砍柴工啊。
本文结束,知道你会看不懂,看不懂才写给你看,也算我的笔记,过段时间可以回顾。