1.正则表达式简介:
正则表达式是一些具有特殊含义的字符组成的字符串,多用于查找替换符合规则的字符串。
2.元字符:
元字符:有特殊含义的字符
常见的元字符如下:
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
$ | 匹配字符串的结束 |
示例:
(1)\d\w\s 匹配第一个字符为数字,第二个字符为字母或数字、或下划线或汉字,第三字符为空格的字符串 例如:22 ,2a , 1_
(2)^\d{18}&匹配18位均为数字的身份证号
(3)1^\d{10}&匹配以1开头的11位手机号
3.反义字符
反义字符:用于查找除某个字符以外其他任意字符均可以的情况
常用的反义字符:
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
详解和示例:
(1)\W 匹配除字母、数字、下划线、汉字以为的字符形如 +,-,*
(2)\S 匹配除空格以外的任意字符形如:1,* ,)
(3)[^abcde]匹配除abcde以为的其他字符 如 e,f,g,h
4.限定字符
限定字符:多用于重复匹配次数
常用的限定字符
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
详解和示例:
(1)\d* 匹配重复0次或多次数字 例如:可能为空 或 任意数字 (2,3。。。。)
(2)\d+ 匹配重复1次或多次数字 例如:可能为1个或多个数字 1,23,234,2345,........
(3)\d? 匹配重复0个或者一次数字 例如:可能为空或者任意的一个数字(1,2,。。。)
(4)\d{8}匹配重复8次数字 例如:123456768
(5)\d{4,}匹配重复至少4次数字 例如:1234,12345,124244,。。。。。
(6)^\d{8,11}$ 匹配重复8-11次数字 例如:12345678,123456789,1234567890,12345678901
5.转义字符
转义字符:实际的开发中,可能会遇到要匹配元字符的情况,这个时候就需要进行字符转义
转义前 | 转义后 |
. | \. |
* | \* |
\ | \\ |
例如:需要匹配qq邮箱:xxxxxxxxxx@qq.com
代码段:\d{8,}@qq\.com
6.字符分枝
字符分枝:多用于满足不同情况的选择,用“|”将不同的条件分割开来
比如有些固定电话区号有三位,有些有四位,这个时候可以采用字符分枝
代码:\d{3}-\d{8}|\d{4}-\d{8} 匹配两种不同长度区号的固定电话
7.字符分组
字符分组:用于将多个字符重复,主要通过使用小括号()来进行分组
例如:(\d\w){3} 重复匹配3次(\d\w)
常用于表示IP地址 形如: ((25[0-5]|2[0-4][0-9]|[0-1]\d\d)\.){3}(25[0-5]|2[0-4][0-9]|[0-1]\d\d)
255.255.255.255
常用分组语法:
8.懒惰匹配和贪婪匹配
贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。
懒惰匹配,有时候需要匹配尽可能少的字符。
例如: a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。但是我们此时可能需要匹配的是ab这样的话,就需要用到懒惰匹配了,懒惰匹配会匹配尽可能少的字符。
常用的懒惰匹配限定符如下:
9.后向引用
后向引用:用于重复搜索前面某个分组匹配的文本。
例如:\b(\w+)\b\s+\1\b 用来匹配重复的单词 如:go go, aa aa
\b 匹配开始和匹配结束
\w+ 一个或多个字母或下划线
\s+ 一个或多个空格
\1 编号为1的分组,也就是(\w)
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b
10.零宽断言
零宽断言:有时候需要查找某些匹配位置之前或之后的内容,这个位置应该满足一定的条件(即断言)
举例:比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
11.常用的实用正则表达式整理
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
验证身份证号(15位或18位数字):"^"d{15}|"d{18}$"。