正则表达式
最近会时常遇到编写正则表达式,所以现在写一篇正则表达式的文章来简单记录一下学习正则的过程。
在这个网站有正则表达式的中文文档 -》 正则表达式手册
特殊字符
一般使用反斜杠 \ 来转义特殊字符 如在正则中有特殊意义的* 或者. 如果要使用原意则需要使用\来进行转义 如 \*。下面介绍几个具体的实例。
- ^ 匹配输入字符串的开始位置
- $ 匹配输入字符串的结束位置
- . 匹配除去换行符之外的所有字符
- * 匹配前面字符0次或者多次
- ? 匹配前面大的字符0次或者1次
- + 匹配前面字符一次或多次
- \w 匹配字母或者数字
- \s 匹配任意空白
- \d 匹配数字
- \b 匹配单词的开始或者结束
一般使用 ^ 开头并且以 $ 结束,如验证5-12位数字的时候可以这样写 ^\d{5,12}$
当字符串为 "hello world
是,使用$时匹配到一处,而使用\b时会匹配到四处,分别为每个单词的开头和结尾。
特殊字符非常重要,是正则表达式的基本。在上面的例子中使用到了重复,也就是{m,n} m和n是重复的次数,如果n存在,那么就重复m到n次如果不存在,就重复m次。
字符匹配
当使用到非特殊字符的时候,可以使用中括号,如 [aeiou]用来表示其中的字符都可以匹配到。比如 字符串 ‘how hello’
使用到正则表达式 h[oe]
这样可以提示匹配到两处
当需要使用与特殊字符相反的含义的时候 使用反斜杠+大写字符的格式来进行匹配。比如匹配非字母和数字的字符就应该使用\W
(因为使用匹配字母和数字的特殊字符是\w)。非特殊字符的反义使用^号。如[^aeiou]表示原因字符意外的任意字符。
当想匹配多种情况的时候,比如我想匹配x或者y字符串那么就使用 x|y 来表示匹配x或者y。这样可以解决很多二义性的匹配串。
分组的匹配
当想对一个字符串进行重复,那么可以使用分组的功能。使用小括号来实现。典型的ip地址的匹配就可以这样使用(\d{1,3}.){3}\d{1,3}
使用 \\+数字
的形式 来实现重复那个分组的操作
如 \b(\w+)\b\s+\1\b
就可以匹配相同的字符串。
贪婪模式
当使用?紧跟其他任何一个其他限制符之后比如. * 之后,匹配模式是非贪婪的,尽可能少的匹配搜素的所有字符串。比如搜多ppppppp字符串,使用‘o+?’会匹配到单个o
关于 的后续
(?:pattern) 匹配pattern但不获取结果。这在使用|来组合一个模式的各个部分非常有用,比如常规匹配两种字符串“username|userManner”可以使用user(?:name|Manner)来简写。
(?=pattern) 正向肯定预查。比如windows(?=95|03|NT)能够匹配到windows95中的windows而不能匹配到windowsxp中的windows
(?!pattern) 正向否定预查。与上面的意思相似,就是能够匹配到非的指定条件。比如windows(?!95|03|NT`能够匹配到windowsxp中的windows而不能匹配到windows95中的windows
(?<=pattern) 反向肯定预查。和第一个很相近,只不过方向不同。
(?<!) 反向否定预查 。
这次的正则表达式就先总结到这里,以后肯定会遇到更多的关于正则的问题。有时间一定还要读读英文的正则教程