正则表达式从入门到分析
简单模糊查询 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 ,用这种会占用一个匹配