基础
元字符 | 描述 | 简写 | 描述 |
---|---|---|---|
. | 句号匹配任意单个字符除了换行符。 | . | 除换行符外的所有字符 |
[ ] | 字符种类。匹配方括号内的任意字符。 | \w | 匹配所有字母数字,等同于 [a-zA-Z0-9_] |
[^ ] | 否定的字符种类。匹配除了方括号里的任意字符 | \W | 匹配所有非字母数字,即符号,等同于: [^\w] |
* | 匹配>=0个重复的在*号之前的字符。 | \d | 匹配数字: [0-9] |
+ | 匹配>=1个重复的+号前的字符。 | \D | 匹配非数字: [^\d] |
? | 标记?之前的字符为可选. | \s | 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}] |
{n,m} | 匹配num个大括号之前的字符或字符集 (n <= num <= m). | \S | 匹配所有非空格字符: [^\s] |
(xyz) | 字符集,匹配与 xyz 完全相等的字符串. | \f | 匹配一个换页符 |
| | 或运算符,匹配符号前或后的字符. | \n | 匹配一个换行符 |
\ | 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ | | \r | 匹配一个回车符 |
^ | 从开始行开始匹配. | \t | 匹配一个制表符 |
$ | 从末端开始匹配. | \v | 匹配一个垂直制表符 |
\p | 匹配 CR/LF(等同于 \r\n ),用来匹配 DOS 行终止符 | ||
符号 | 描述 | 例子 | 解释 |
?= | 正先行断言-存在 | `(T | t)he(?=\sfat)` => The fat cat sat on the mat. |
?! | 负先行断言-排除 | `(T | t)he(?!\sfat)` => The fat cat sat on themat. |
?<= | 正后发断言-存在 | `(?<=(T | t)he\s)(fat |
?<! | 负后发断言-排除 | `(?<!(T | t)he\s)(cat) `=> The cat sat on cat. |
标志 | 描述 | 例子 | 解释 |
i | 忽略大小写。 | /The/gi => The fat cat sat on the mat. | 表达式 /The/gi 表示在全局搜索 The ,在后面的 i 将其条件修改为忽略大小写,则变成搜索 the 和 The ,g 表示全局搜索。 |
g | 全局搜索。 | /.(at)/g => The fatcatsat on the mat. | 修饰符 g 常用于执行一个全局搜索匹配,即(不仅仅返回第一个匹配的,而是返回全部)。 |
m | 多行修饰符:锚点元字符 ^ $ 工作范围在每行的起始。 | /.at(.)?$/gm => The fatcat sat on the mat. | 多行修饰符 m 常用于执行一个多行匹配。 |
惰性匹配 | 默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。 | /(.*?at)/ => The fat cat sat on the mat. | 使用 ? 将贪婪匹配模式转化为惰性匹配模式 |
练习题
问题 | 表达式 | 解释 | |
---|---|---|---|
1 | 匹配整数或者小数(包括正数和负数) | -?\d+(\.\d+)? | -?表示-匹配0次或一次,\d表示整数,+表示匹配一次或多次,(.\d+)?表示小数 |
2 | 匹配年月日日期 | `1\d{0,3}-(1[0-2] | 0?[1-9])-(3[01] |
2. (1[0-2]|0?[1-9]) 中前面的1[0-2]表示从10到12,后面的0?[1-9] 表示01-09或者1-9, (1[0-2]|0?[1-9]) 表示月,01-12或者1-12 | |||
3. (3[01]|[12]\d|0?[1-9])$ 其中3[01] 表示30或31,[12]\d 表示从10-29,最后的0?[1-9] 表示从01-09或者是从1-9.整体就表示从01-31或者1-31 | |||
3 | 匹配qq号 | [1-9]\d{4,11} | 表示5位到12位qq.第一位为非0 |
4 | 11位的电话号码 | 1[3-9]\d{9} | 第一位数字为1,第二位为3-9,后面随便9位数 |
5 | 长度为8-10位的用户密码 : 包含数字字母下划线 | \w{8,10} | |
6 | 匹配验证码:4位数字字母组成的 | [\da-zA-Z]{4} 或者[0-9a-zA-Z]{4} | [ ]里面的表示数字,或者a-z或者A-Z,{4}表示4位 |
7 | 匹配邮箱地址 | [0-9a-zA-Z][\w\-.]+@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)\*\.[A-Za-z0-9]{2,6} | [0-9a-zA-Z][\w\-.]+ @ 前面必须有内容且只能是字母(大小写),数字,下划线,减号,点 |
[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)\* @ 和最后一个点之间必须有内容且只能是字母(大小写),数字,点,减号,且两个点不能挨着 | |||
[A-Za-z0-9]{2,6} 最后一个点之后必须有内容且内容只能是字母(大小写),数字长度为大于等于2, 小于等于6 | |||
8 | <a>wahaha</a> 匹配标签 | <\w+> | |
9 | 1-2\*((60-30+(-40/5)\*(9-2\*5/3+7/3\*99/4\*2998+10\*568/14))-(-4\*3)/(16-3\*2)) | ||
从上面算式中匹配出最内层小括号以及小括号内的表达式 | \([^()]+\) | \( 和\) 表示前后位( ), [^()] 就表示外面的()里面没有() | |
10 | 从类似9-2*5/3+7/3*99/4*2998+10*568/14的表达式中匹配出从左到右第一个乘法或除法 | \d+[\*/]\d+ | [*/] 前后的\d+ 表示* 或/ 前面的整数,可能是多位数字,要加+ |
差分谱匹配正则
[*{} ]|^^\w+ 替换成 空
, 替换成
组匹配
\0
1-9 ↩︎