最近几天在开发网页的过程中,遇到了需要自动把网页文章正文内容自动给关键词添加超链接的功能,经过一天的折腾,最终搞定了。
自动添加关键词的原理就是用正则表达式替换,自动把纯文本的关键词替换成超链接的HTML源码。
什么是正则表达式?
正则表达式是一种表示如何字匹配符串的式子,它可以检测一段文本中是否包含有特定规律的字符串,然后进行提取或替换。
正则表达式用在什么地方?
1.数据验证。比如登陆页指定用户输入的信息不能包含某些字符,或要求按一定规则去填写。比如注册页的用户名,限定为英文和数字的组合,密码限定需要有大小写字母和数字并且长度不能少于六个字符。
2.内容查找
信息采集工具用得比较多,比如从网页中提取所有符合条件的超链接,提取网页中的图片地址,提取网页中某些影视资源的下载地址等。
3.内容替换
有些涉及用户隐私的信息不方便全部显示在网页上,比如用户的手机号、邮箱、收货地址、真实姓名等,可以替换成保留首尾而中间用星号*替换,防止用户信息和隐私被采集。
常用到的正则表达式概念
1.子表达式:在正则表达式中,如果使用"()"括起来的内容,称之为“子表达式”。
2.捕获:子表达式匹配到的结果会被系统放在缓冲区中,这个过程,我们称之为“捕获”。
3.反向引用:我们使用"\n",其中n是数字,表示引用之前某个缓冲区之间的内容,我们称之为“反向引用”。
常用到的正则表达式符号
1.数量限定符
x+ 表示:1或多个
x* 表示:0或多个
x? 表示:0或1个
x{n} 表示: n个
x{n,} 表示:至少n个
x{n,m} 表示:n至m个,贪婪原则,会尽可能匹配多个;如果在后面加个?,则为非贪婪原则
2.字符限定符
\d 表示:匹配一个数字字符,[0-9]
\D 表示:匹配一个非数字字符,[^0-9]
\w 表示:匹配包括下划线在内的单词字符,[0-9a-zA-Z_]
\W 表示:匹配任何非单词字符,[^0-9a-zA-Z_]
\s 表示:匹配任何空白字符,空格、回车、制表符
\S 表示:匹配任何非空白字符
3.范围字符
[a-z]、[A-Z]、[0-9]、[0-9a-z]、[0-9a-zA-Z]
4.任意字符
[abcd]、[1234]
5.非在内的字符
[^a-z]、[^0-9]、[^abcd]
4、 定位符
^ 表示:开头标识
$ 表示:结尾标识
\b 表示:单词边界
\B 表示:非单词边界
5.转义符
\ 用于匹配某些特殊字符
6.选择匹配符
| 可以匹配多个规则
7.特殊用法
?= 正向预查:匹配以指定内容结束的字符串
?! 负向预查:匹配不是以指定内容结束的字符串
?: 不把选择匹配符的内容放到缓冲区
哪些语言支持正则表达式?
aardio、javascript、c#、CPP、java、python等开发语言都支持正则表达式。在aardio中,用得更多的是模式匹配,和正则表达式略有区别,但大部分的用法是相同的。