正则表达式从入门到分析

简单模糊查询 hi

可以匹配hi,HI,Hi,hI这四种情况中的任意一种。包含hi这两个连续的字符,比如him,history,high等等

精确地查找hi这个单词

\bhi\b

单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

\bhi\b.*\bLucy\b

解释: . 表示除了换行符以外的任意字符

​ * 表示内容可以是任意数量的(扩展+重复一次或更多次 ?重复零次或一次)

​ .*连在一起就意味着任意数量的不包含换行的字符

匹配以0开头,然后是两个数字,然后是一个连字号”-“,最后是8个数字

方式一 0\d\d-\d\d\d\d\d\d\d\d

解释:\d匹配一个数字

方式二 0\d{2}-\d{8}

解释:{2}({8})的意思是前面\d必须连续重复匹配的次数

扩展:{5,12}则是重复的次数不能少于5次,不能多于12次

​ {n,}重复n次或更多次

小结:

\b . 等称为元字符,常用的元字符如下表

常用的元字符

代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字 \W 用大写表示相反含义 匹配不是字母或数字或下划线或汉字
\s 匹配任意的空白符 \S 用大写表示相反含义 匹配不是空白符
\d 匹配数字 \D用大写表示相反含义 匹配任意非数字的字符
\b 匹配单词的开始或结束 \B用大写表示相反含义 匹配不是单词开头或结束的位置
^ 匹配字符串的开始 类似 \b的开始
$ 匹配字符串的结束 类似\b的结束

注意:如果要查找元字符本身的话,如查找字符串中是否包含$ ,需要加\转义,否则会被解释成匹配字符串的结束

如  \b\$.\b   匹配的为$开头的字符串并以除换行符以外的任意字符结尾

其他需要转义的

匹配双引号"\"
匹配单引号''

{2} {5,12}等称为限定符,指定可允许匹配的次数,常用的限定符如下表

​ 常用的限定符

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

​ 重叠限定符的含义

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

扩展:对一段整体加限定符,把整体括号起来即可,括号起来的内容叫分组

\b(\d\s){10}000\b  数字加空白字符,整体重复10次,最后拼000  

匹配自定义字符[aeiou]

可以匹配aeiou中任何一个字符

其他[.?!] 匹配标点符号(.或?或!)。

扩展:[0-9] 匹配0到9中的一个数字,含意与\d就是完全一致的

​ [a-z0-9A-Z_] 可以匹配a到z、0到9、A到Z

  • 用^匹配相反含义:
[^aeiou]   匹配除了aeiou这几个字母以外的任意字符

或条件 |

\d{5}-\d{4}|\d{5}

解释:从左到右,先判断\d{5}-\d{4} 是否满足,满足就不判断后面

在其他位置引用分组内容

\b(\w+)\b\s+\1\b

解释:对于分组(\w+)被引用到\1重复使用了,所以可以匹配到结果如 go go 或者kitty kitty等。

​ 1代表从左到右的分组的顺序

扩展:可以自定义分组的名称

方式一:

?<Word>  定义分组名为Word
\k<Word>  引用分组Word

方式二:

?'Word' 定义分组名为Word
\k'Word'  引用分组Word

所以例子可以写成

\b(?<Word>\w+)\b\s+\k<Word>\b

排除分组内容在匹配

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

解释:开头匹配为\w+ 排除结尾并且是ing的

​ 这种格式为(?=exp),对结尾内容生效

扩展一 :(?<=exp) ,对开头部分生效,如

(?<=\bre)\w+\b 排除开头并且是re的,后面满足\w+

一起使用如:

(?<=\s)\d+(?=\s) 排除开头并且是空白字符的 ,中间多个数字,排除结尾并且是空白字符的

扩展二:(?!exp) , 排除任意位置值,并且不占用一个匹配

\b\wq(?!u)\w\b 排除q后为u的值,并且这个值也满足\w

\b\w*q[^u]\w*\b   排除q后为u的值,但是这个值下一个值去匹配\w  ,用这种会占用一个匹配