正则表达式简易教程

不死鸟之翼@Celestial Garden 未经授权禁止转载
在这放一篇正则表达式的简单入门教程,力求清晰易懂
在阅读本文之前建议自备一个正则表达式测试器,推荐deerchao写的

0 什么是正则表达式
简单地说,正则表达式是用于文本处理的一种工具,编写一种“模式”来匹配和修改字符串

输入文本是【My name is AzureFx.】,我希望测试其中是否包含【chibimiku】或者【AzureFx】,那么编写如下正则
chibimiku|AzureFx
运行匹配,得到结果如下

0
AzureFx

再来一个复杂点儿的
WAP页面的图片会变成一个[查看图片]的链接,我希望变成img标签。
输入文本是【<a href=”http://foo.com/foo.png” target=”_blank”>[查看图片]</a>】,这次用正则【<a href=”(\S*)” target=”_blank”>\[查看图片\]</a>】进行替换,替换目标为【<img src=”$1″/>
运行替换,得到结果如下
<img src=”http://foo.com/foo.png”/>
1 元字符
正则表达式的元字符很多,不同的语言和库也支持自己的扩展功能。元字符指具有特定功能的字符,概念类似Windows的“通配符”*和?,但远比这个复杂。有的元字符代表某个实体字符,有的代表某个位置

. 匹配一个任意字符
\S 匹配一个可见字符
\s 匹配一个不可见字符
^ 匹配字符串的开始
$ 匹配字符串的结尾
反斜杠加上某个有功能的字符可以转义。例如\.就是点这个字符本身
可以指定字符的集合
[0123456789]
或者写成
[0-9]
例如【re.e..e】可以匹配【reserve】或【reverse
2 量词
量词可以重复发挥一个字符的匹配作用。
常见的量词有
* 匹配0次或以上
? 匹配0次或1次
+ 匹配1次或以上
{m} 匹配m次
{m,n}匹配m次至n次(闭区间)
{m,}匹配m次或以上
例如【uid=[0-9]+】可以匹配【hhhhhuid=1112128hhhhh
默认量词的作用是贪婪的,即尽可能多地匹配字符
量词后加【?】可改为非贪婪的,即尽可能少地匹配字符
3 捕获
正则可以用于提取出特定的信息,称为捕获,用一对圆括号【()】实现
上面的例子可以改写为【uid=([0-9]+)】,可以捕获等号后面的uid数字。再次运行匹配,输出如下

0 1
uid=1112128 1112128

第一行代表捕获组的编号,0代表被匹配的全部字符串,从1开始是捕获组的序号
让我们回到开头的例子
<a href=”(\S*)” target=”_blank”>\[查看图片\]</a>
这里用圆括号包裹了“任意个可见字符”,也就是说我们想捕获href属性的字符串内容。(注意,【[】【】方括号要转义)
有的时候我们需要用括号组合一些内容,但又不想将其加入捕获,可以使用非获取匹配【(?:   )
例如【chibi(?:miku|luka)】可以匹配【chibimiku】或者【chibiluka】,但不会将【miku】或【luka】加入捕获。这是【chibimiku|chibiluka】的简便写法。
4 替换
用正则进行替换时 用【$X】引用捕获的内容,X为组号。还是开头的例子,【<img src=”$1″/>】中的【$1】引用了href属性的链接内容,完成a标签到img标签的自动转换

看到这你大概会用正则处理问题了吧?其实元字符和语法还有很多,实在忘了的话去百度查个表也是没问题的
合理使用正则可以大幅度提高工作效率,即使日常中使用也有特效哦