正则表达式必知必会

1. 正则表达式的两种用途:搜索和替换。

2. 搜索有两种情况,一种是根据提供的字符串搜索以寻找一个匹配。一种是子字符串搜索,会得到多个匹配的子字符串。

3. 验证某个模式能否获得预期的匹配结果并不困难,但如何验证他不会匹配到你不想要的东西就比较困难了

4. 贪婪型元字符和懒惰型元字符的区别:

     *和+都是贪婪型元字符,他们在进行匹配的时候,行为模式是多多益善而不是适可而止。它们会尽可能的从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止

Image

贪婪型:

Image(1)

懒惰型:

Image(2)

5. \b 和\B 的区别

Image(3) Image(4)

6. 回溯引用:前后一致匹配

     子表达式除了可以用在重复匹配操作中以外,还可以在模式的内部被引用。这种引用被称为回溯引用。

     1. 匹配前面出现的内容,使用"\数字"或者"$数字"

Image(5)

     2. 替换:

            2.1. 将email地址替换为链接形式

Image(6)

            2.2. 电话号码格式替换

Image(7)

2.3. 大小写转换:

Image(8)

7. 向前向后查找

     1. 正向前查找: ?= 的用法,表示后面的字符需要正确匹配,但不进行消费

Image(9) Image(10)

     2. 正向后查找: ?<= 的用法。表示匹配到后面的字符,但是不消费这个资费

Image(11) Image(12)

     3. 正向前向后查找

Image(13)

8. group(0)表示匹配到的内容,group(1)表示第一个()中的内容,以此类推

9. 负向前向后查找

     只查找数量,不包含金额

Image(14)

10. 条件查找

     1. 用于查找北美电话格式,即第一条和第二条:^(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}$

Image(15)

     2. 前后条件查询

Image(16)

附录:

\d 和\D
\d 表示 0 到 9 之间的一个数字,而\D 则是\d 的补集,表示 0 到 9 以外的任意一个字符
\w 和\W \w 表示字母、数字、下画线中任意的一个字符,而\W 则表示除字母、数字、下画线之外的任意一个字符
\s 和\S \s 表示任意一个空白字符,如空格、制表符、换页符等,而\S 表示空白字符以外的任意一个字符
\d [0-9]
\D [^0-9]
\w [A-z0-9]
\W [^A-z0-9]
\s [\t\n\r\f]
\S [^\t\n\r\f]
S? 表示指定的字符或组最多出现一次,可以没有
S+ 表示指定的字符或组至少出现一次,多了不限
S* 表示指定的字符或组可以出现任意次,包括不出现
{n} 表示指定的字符或组必须出现 n 次
{m,n} 表示指定的字符或组最少出现 m 次,最多出现 n 次
{n,} 表示指定的字符或组最少出现 n 次,多了不限
. 表示任何字符
[] 表示范围
| 表示或
() 表示组的概念。如a(b|be)c
^ 只有^在[]内,并且紧跟在[之后的才表示是否字符,否则表示字符串的开头。
\b        
匹配一个单词的开始或结尾。比如\ba 匹配以a开头的内容,a\b匹配以a结尾的内容
\B       
 匹配不是单词边界的连接符
(?m)      
启用分行匹配模式。在该模式下^不仅匹配到正常的字符串开头,还将匹配到分隔符(换行符)后的开始位置。但有许多正则表达式不支持
\1        
表示前面第一个子表达式(用()括起来的部分)。\2 表示前面第二个子表达式。以此类推
\l      
把下一个字符转成小写
\L      
\L\E之间的字符转成小写
\u     
把下一个字符转成大写
\I     
把\L到\E之间的字符转成大写
?=     
正向前查找
?<=     
正向后查找
?!        
负向前查找
?<!        负向后查找
?(A)B   
if A 存在 then B
?(A)(B|C)  
if A 存在 then Belse C
posted @ 2013-10-16 22:18  jeevan Wong  阅读(202)  评论(0编辑  收藏  举报