正则表达式-笔记

什么是正则表达式

正则表达式是一种文本模式,使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串;

正则表达式的用途

  1. 数据验证,测试字符串内的模式
  2. 替换文本
  3. 基于模式匹配从字符串中提取字符串

语法

限定符(数量符)

1
2
3
4
5
6
7
8
9
? 0或者1个
+ 1或者多个
* 0到多个

规则: ? < + < *

x{n} 匹配x确定的n次
x{n,} 匹配x至少匹配n次
x{n,m} x至少匹配n次,最多匹配m次

定位符

1
2
3
4
^,$ 匹配字符串的开头,结尾
\b 匹配一个单词边界,即字与空格间的位置;单词边界就是单词和符号之间的边界,这里的单词可以是中文字符,英文字符,数字;符号可以是中文符号,英文符号,空格,制表符,换行

\B 非单词边界匹配, 是单词与单词,符号与符号之间的边界

ps:不能将限定符与定位符一起使用

特殊字符

1
2
3
4
5
6
() 子表达式,标记一个子表达式的开始和结束位置,获取供以后使用
. 匹配除换行符\n之外的任何单字符
[] 中括号表达式的开始与结束,
* [abc]:匹配所包含的任意一个字符
* [^a-z]:匹配所有不是a-z范围的任意字符
x|y 或,指明两项之间的一个选择

常用的元字符

1
2
3
4
5
6
7
8
9
10
11
. 匹配 除换行符以外的任意字符
\w 匹配 字母,数字,下划线,汉字
\s 匹配 任意的空白字符
\d 匹配 数字
\b 匹配 单词的边界,开始与结束

#反义元字符
\W 匹配 任意不是字母,数字,下划线,汉字
\S 匹配 不是空白字符
\D 匹配 不是数字
\B 匹配 非单词边界

贪婪与懒惰

贪婪匹配:正则表达式中进行数量匹配时,使用的是一种匹配尽可能多的字符
懒惰匹配:进行数量匹配时,匹配尽可能少的字符

模式转换 贪婪=》懒惰

在限定符后面加上一个问号?,可以让匹配模式变成懒惰模式

1
2
3
4
5
x*? x可以重复任意次,尽量少匹配
x+? x可以重复1到任意次,尽量少匹配
x?? x可以重复0或1次,尽量少匹配
x{n,m}? x重复n到m次,尽量少匹配
x{n,}? x重复n次以上,尽量少匹配

正则完整参考列表

https://www.jb51.net/tools/regex_test.htm

参考资料

  1. https://www.jb51.net/tools/zhengze.html#metacode