正则表达式

发布于 2021-01-18  132 次阅读


普通字符

字符
描述
[ABC] 匹配[...]中所有字符 例如 [l] 匹配字符串 "hello" 中所有的 l 字母
[^ABC] 匹配[...]中字符外的所有字符
[A-Z] 表示一个区间 匹配A-Z间的所有字母
. 匹配除换行符之外的任意字符 相等于[^\n\r]
\s 匹配所有空白符(空格、制表符、换页符等等) 包括换行 等价于 [ \f\n\r\t\v] 注意 Unicode 正则表达式会匹配全角空格符
\S 匹配所有非空白符 等价于[^ \f\n\r\t\v]
\w 匹配字母、数字、下划线 等价于 [A-Za-z0-9_]

限定符

字符
描述
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次
{n} n 是一个非负整数 匹配确定的 n 次
{n,} n 是一个非负整数 至少匹配n 次
{n,m} m 和 n 均为非负整数,其中n <= m 最少匹配 n 次且最多匹配 m 次 注意在逗号和两个数之间不能有空格

*+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字

如果要实现非贪婪或最小匹配,只要在它们的后面加上一个 ?

<h1>hello,world!</h1>
#贪婪:下面的表达式匹配从开始的小于符号 (<) 
#到关闭 h1 标记的大于符号 (>) 之间的所有内容
/<.*>/

#非贪婪:如果您只需要匹配开始和结束 h1 标签,
#下面的非贪婪表达式只匹配 <h1>。
/<.*?>/

定位符

字符
描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n\r 之后的位置匹配
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n\r 之前的位置匹配
\b 匹配一个单词边界,即字与空格间的位置
\B 非单词边界匹配

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。

若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。

特殊字符

查找特殊字符 必须转义 即添加\

$ ( ) * + . [ ] ? \ ^ { } |

非打印字符

字符
描述
\cx 匹配由x指明的控制字符 例如 \cM 匹配一个 Control-M 或回车符 x 的值必须为 A-Z 或 a-z 之一 否则,将 c 视为一个原义的 'c' 字符
\f 匹配一个换页符 等价于 \x0c\cL
\n 匹配一个换行符 等价于 \x0a\cJ
\r 匹配一个回车符 等价于 \x0d\cM
\t 匹配一个制表符 等价于 \x09\cI
\v 匹配一个垂直制表符 等价于 \x0b\cK

高级

?=、?<=、?!、?<! 的使用区别

  • exp1(?=exp2):查找 exp2 前面的 exp1
  • (?<=exp2)exp1:查找 exp2 后面的 exp1。
  • exp1(?!exp2):查找后面不是 exp2 的 exp1。
  • (?<!exp2)exp1:查找前面不是 exp2 的 exp1。