正则表达式的入门

正则表达式

最近会时常遇到编写正则表达式,所以现在写一篇正则表达式的文章来简单记录一下学习正则的过程。

在这个网站有正则表达式的中文文档 -》 正则表达式手册

特殊字符

一般使用反斜杠 \ 来转义特殊字符 如在正则中有特殊意义的* 或者. 如果要使用原意则需要使用\来进行转义 如 \*。下面介绍几个具体的实例。

  1. ^ 匹配输入字符串的开始位置
  2. $ 匹配输入字符串的结束位置
  3. . 匹配除去换行符之外的所有字符
  4. * 匹配前面字符0次或者多次
  5. ? 匹配前面大的字符0次或者1次
  6. + 匹配前面字符一次或多次
  7. \w 匹配字母或者数字
  8. \s 匹配任意空白
  9. \d 匹配数字
  10. \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) 反向肯定预查。和第一个很相近,只不过方向不同。

  • (?<!) 反向否定预查 。

这次的正则表达式就先总结到这里,以后肯定会遇到更多的关于正则的问题。有时间一定还要读读英文的正则教程

-------------本文结束感谢您的阅读-------------

本文标题:正则表达式的入门

文章作者:NanYin

发布时间:2018年06月06日 - 17:06

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2018/06/07/2018-06-06-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。