十分钟正则小结

1周前 21次点击 来自 其他

十分钟复习下正则

在线测试工具:

http://tool.oschina.net/regex

常用的元字符

语法 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

重复

语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

分枝

使用**|**标识分歧,可类比编程语言中的‘或’

固定电话号码正则:

0\d{2}-\d{8}|0\d{3}-\d{7}

匹配两种以连字号分隔的电话号码:

  1. 3位区号,8位本地号(如001-12345678);
  2. 4位区号,7位本地号(0123-1234567)。

分组

使用'( )'标识分组:

IP地址正则:

(\d{1,3}\.){3}\d{1,3}
  1. \d{1,3}匹配1到3位的数字;
  2. (\d{1,3}.){3}匹配三位数字加上一个英文句号(分组)重复3次;
  3. 最后再加上一个一到三位的数字(\d{1,3})

反义

使用'^'标识取反:

匹配用尖括号括起来的以a开头的字符串

<a[^>]+> 
语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

零宽断言

零宽度正预测先行断言

断言自身出现的位置的后面能匹配表达式exp

(?=exp)

匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc

\b\w+(?=ing\b)

零宽度正回顾后发断言

断言自身出现的位置的前面能匹配表达式exp

(?<=exp)

匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading

(?<=\bre)\w+\b

负向零宽断言

零宽度负预测先行断言

断言此位置的后面不能匹配表达式exp

(?!exp)

匹配三位数字,而且这三位数字的后面不能是数字,例如abc123456def,它匹配456

\d{3}(?!\d)

零宽度负回顾后发断言

断言此位置的前面不能匹配表达式exp

(?<!exp)

前面不是小写字母的3位数字,例如A123b123,它匹配123

(?<![a-z])\d{3}

贪婪与懒惰

默认为贪婪模式,即正则会匹配最长的结果,如

1.*1

匹配最长的以1开始,以1结束的字符串,例如1231231001,它匹配1231231001

懒惰

1.*?1

匹配最短的以1开始,以1结束的字符串,例如1231231001,它匹配到2个结果 ‘1231’和‘1001’

懒惰限定符

语法 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

以上

Card image cap
开发者雷

尘世间一个小小的开发者,每天增加一些无聊的知识

技术文档 >> 系列应用 >>
热推应用

Let'sLearnSwift

学习Swift的入门教程
标签