正则表达式基本语法笔记
文章目录
regex基本语法结构
regex
= 表达式
与 修饰符
的组合
单个基本字符为一个表达式,例如:
abcde
其中每个字母视作一个基本表达式单位
用小括号括起来的基本字符组合为一个表达式,例如:
a(bc)+de
其中bc被括号括起来视为一个整体的表达式,+为(bc)表达式的修饰符
限定符
? 匹配0或1次
问号用于匹配“?”前面一个表达式出现0次~1次:
例如:
used?
use
used
* 匹配0或多次
星号用于匹配“*”前面一个表达式出现0次~多次:
例如:
ab*c
ac
abc
abbc
abbbbc
+ 匹配1次或多次
加号用于匹配“+”前的表达式出现1次~多次:
例如:
ab+c
abc
abbbc
abbbbbc
{ } 匹配指定次数或指定范围的次数
花括号可以用于指定前一个多项式出现指定的次数(或指定范围的重复次数),例如:
ab{6}c
abbbbbbc(指定重复6次)
ab{2,5}c
abbc
abbbc
abbbbc
abbbbbc(重复2到5次)
ab{3,}c
abbbc
abbbbbbbbbbc(重复出现三次及以上)
逻辑符
| 逻辑或
竖线(逻辑或)用于(A | B)
描述匹配A表达式或B表达式,例如:
a (cat|dog)
a cat
a dog
[ ]和- 仅由……组成
方括号表示,此表达式只能由方括号内的基本字符组合构成,例如:
[abc]+
abccab
a
aab
ca
bb
aabbcc
方括号内的字母组合可以用 -
表示一段范围,例如:
[a-z]+
任意小写字母组合
[A-Z]+
任意大写字母组合
[a-zA-Z]+
任意大小写字母组合
[a-zA-Z0-9]+
所有的英文字母和数字的任意组合
注意,使用减号连字符表示一段字符范围的时候,必须按照ASCII码正序排列,例如:
[a-z]
ASCII码增长正序排列,正确
[z-a]
ASCII码增长逆序,报错!!!
[A-z]
表示从ASCII码表的A【65号】~z【122号】。大写字母ASCII码在前面,因此是正序,符合语法,正确!
但是,不推荐这么写!!!因为在Z~a之间还有 [\]^_` 这6个基本符号!
[ ]和^ 由除……以外的组成
尖^在方括号中表示,此表达式只能由除括号[ ]内字符以外的字符组成,例如:
[^0-9]+
表示表达式只能由基本ASCII码表中,除了0-9以外的字符组成
元字符
正则表达式的大多数元字符都以反斜线\
开头
\d 数字字符
\d
数字字符,效果等效于 [0-9]
\d+ 效果等价于 [0-9]+
\D 非数字字符
\D
非数字字符,等效于 [^0-9], 正好是\d的补集
同理,\D+ 等价于 [^0-9]+
\w 西文基本字符
\w
西文基本字符,取word之意,效果等价于 [0-9A-Za-z]
\w+ 效果等价于 [0-9A-Za-z]+
\W 非西文基本字符
\W
非西文基本字符,同理,为 \w 的补集
\W+ 效果等价于 [^0-9A-Za-z]+
\s 空白符
\s
空白符,取space之意,包括空格符,换行符,制表符
\S 非空白符
\S
非空白字符。表示除了空格、换行、制表以外的基本ASCII字符
\b 表达式匹配边界
\b
表示正则表达式的边界,表示每个表达式匹配到此为止
. 任意字符(不含换行)
.
表示任意字符(不包含换行符)
^ 表示行首
尖(代表行首)放在一个基本表达式之前,用于匹配行首表达式,例如:
^a
a
abc
aajpdsagjp
注意,此选项应启用regex多行匹配模式(-m),否则只会匹配一段文本的第一行行首!
$ 表示行尾
dollar(代表行尾)放在基本表达式之后,用于匹配行尾表达式,例如:
a$
jlda
jflkajfa
's;dg'a
a
同理,此选项也仅在启用多行匹配模式(-m),否则会产生奇怪的现象。
贪婪匹配和懒惰匹配规则
默认的情况下,regex采用贪婪匹配规则,即一个表达式会匹配尽可能多的字符,例如:
<.+>
<span><b>This is a sample text</b></span>
上面这段文本会整个被此正则表达式匹配。
但这并不是我们想要的结果,我们只想要regex匹配出单独的一个<html tag>
在上面这种情况下,我们需要使用?符,将默认的贪婪匹配切换为懒惰匹配规则:
<.+?>
只会匹配出上述文本的<span> <b> </b> </span>
同理,也可以举一反三导出 *?
和 ??
的作用。
参考资料
1.【10分钟快速掌握正则表达式】 https://www.bilibili.com/video/BV1da4y1p7iZ/?share_source=copy_web&vd_source=68144598d7ca91b93c7ed70bbbce238c
by tsukimi 2023.9.25