第一次接触正则表达式还是听师兄说起过的,总感觉很难。在买书的时候看到《正则表达式必知必会》时果断买下来啦,还被嘲笑30分钟可以入门的事,一定要每天一章一章地看,发现确实不难。也许每天一章一章地看只是想证明我可以坚持一件事吧~
下面是自己的一些总结,方便自己和他人查阅。
正则表达式用来匹配和处理文本的字符串,它经常被简称为模式,其实就是一些由字符构成的字符串。这些字符可以是普通字符(纯文本)或元字符(有特殊含义的特殊字符)。正则表达式语言是内置于其他语言或软件产品里的“迷你”语言。主要用途是用于“搜索”和“替换”。
正则表达式中的特殊字符
.:可以匹配除换行符以外的任意单个字符
\:用来对特殊字符进行转义
[]:用来定义一个字符集合,其含义是必须匹配该集合里的字符之一。有两种形式:1,把所有字符列举出来;2,利用原字符“-”以字符区间的方式给出;[0123456789]与[0-9]等价
^:只有当它出现在一个字符集合里(被放在[和]之间)并紧跟在左方括号[的后面时,它是“求非”的作用(如:非数字[^0-9])。如果是在一个字符集合的外面并处于一个模式的开头,它匹配字符串的开头
\b:指定一个单词边界(\bcap\b匹配cap;\bcap匹配captain,cap,cape;cap\b匹配cap,recap)
$:字符串的结尾
[\b]:退格
\f:换页
\n:换行
\r:回车
\t:Tab键
\v:垂直制表符
\d:任何一个数字字符(等价于[0-9])
\D:任何一个非数字字符(等价用于[^0-9])
\w:任何一个字母(大小写都可),数字,下划线(等价于[a-zA-Z0-9_])
\W:任何一个非字母数字或非下划线字符
\s:任何一个空白字符
\S:任何一个非空白字符
+:匹配字符或字符集合的一次或多次重复出现
*:匹配字符或字符集合的零次或多次重复出现
?:匹配字符或字符集合的零次或一次重复出现
{}:设定匹配字符或字符集合重复出现次数的最小值和最大值
():子表达式
|:或者
回溯引用匹配
回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式
\1:代表模式里的第一个子表达式
\2:代表模式里的第二个子表达式
以此类推;
回溯引用在替换中的应用:
例子:
文本:
313-555-1234
248-555-9999
810-555-9000
正则表达式:
(\d{3})(-)(\d{3})(-)(\d{4})
替换:
($1) $3-$5
结果:
(313) 555-1234
(248) 555-9999
(810) 555-9000
前后查找
java、.NET,PHP和Pert都支持向后查找,而javaScript不支持
向前查找:以(?=)开头的子表达式
例子:
文本:
http://www.forta.com
http://mail.forta.com
ftp://ftp.forta.com
正则表达式
.+(?=:)
结果:
http://www.forta.com
https://mail.forta.com
ftp://ftp.forta.com
向后查找:以(?<=)开头的子表达式
例子:
文本:
ABC01: $23.45
HGG42: $5.32
Tatal items found:4
正则表达式
(?<=\$)[0-9.]+
结果:
ABC01: $23.45
HGG42: $5.32
Tatal items found:4