正则表达式小记

前言: 正则表达式使用单个[字符串]来描述、匹配一系列匹配某个[句法规则]的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

注1:前边的字符指前面单个字符。如需适用于多个字符需要使用()包括,如:(ab)+

注2:所有字符都可以嵌套使用

基础内容

+ * ?
+ 号表示前边的字符必须至少出现一次(1次或多次);

* 表示前边的字符可以不出现,或者出现一次或者多次(0次、或1次、或多次)

? 号表示前面的字符最多只可以出现一次(0次或1次)

{}
{}前面的字符出现的次数是4次,就用{4}表示

还可以允许我们输入一个范围;比如{2,4}表示前一个字符出现2到4次;

表示出现2次以上;就用{2,}表示;
| “或” 通配符 如果想找 a dog和a cat就在()里加“|”;这里前面会先区匹配“a”
字符类[]
字符类[]+可以匹配中括号里的字符,匹配到的字符只能取自于它们

[a-z]+ 表示匹配所有的小写英文字母;[A-Z]+ 表示匹配所有的大写英文字母;

[a-zA-Z]+ 表示匹配所有的英文字符;[a-zA-Z0-9]+ 表示所有的英文字符和数字

取反
[]+ 前边加 ^ ,就表示匹配除了尖号后边列出的【以外】的字符

常用字符

\d \w \s \D \W \S … 正则表达式的大多数元字符都以反斜杠开头;

d: \d 是数字字符,等同于之前写的 [0-9]+;
D: 与 \d 相对应的 \D 代表非数字字符

w: \w 代表单词字符(英文、数字及下划线)
W: 与 \w 相对应的 \W 代表非单词字符

s: \s 代表空白符 (包含Tab和换行符)
S: 与 \s 相对应的 \S 代表非空白字符

.: 其中 . 在正则表达式中也是一个特殊字符;它代表任意字符,但不包含换行字符。

^ $ : 两个特殊字符 ^ 匹配行首、$ 匹配行尾;

匹配机制

​ 默认贪婪匹配机制,可以使用?切换为懒惰匹配
贪婪:会尽量匹配到更多符合要求的内容;
懒惰:仅仅找到第一个满足条件的匹配内容。
简单理解:在同一匹配条件下,贪婪 = 懒惰+右侧存在能匹配上的

<.+> 与 <.+?>

源字符串:aa<div>test1</div>bb<div>test2</div>cc 

正则表达式一:<div>.*</div> 

匹配结果一:<div>test1</div>bb<div>test2</div> 

正则表达式二:<div>.*?</div> 

匹配结果二:<div>test1</div>(这里一次匹配结果,所以没包括<div>test2</div>) 

懒惰 = <div>test1</div>
贪婪在懒惰的基础上继续匹配右侧字符串,发现能继续匹配到 </div> 

常用语法

  1. Flags(标志符或修饰符)

g:全局匹配(global);正则表达式默认只会返回第一个匹配结果,使用标志符g则可以返回所有匹配

i:忽略大小写(case-insensitive);在匹配时忽略英文字母的大小写

m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 \n 或 \r
分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处

Character Sets(字符集合)

用于匹配字符集合中的任意一个字符,常见的字符集有:

[xyz]:匹配 “x"或"y”``“z”

[^xyz]:补集,匹配除 “x” “y” "z"的其他字符

[a-z]:匹配从 “a” 到 “z” 的任意字符

[^a-n]:补集,匹配除 “a” 到 “n” 的其他字符

[A-Z]:匹配从 “A” 到 “Z” 的任意字符

[0-9]:匹配从 “0” 到 “9” 的任意数字

比如匹配所有的字母和数字可以写成:/[a-zA-Z0-9]/ 或者 /[a-z0-9]/i

Quantifiers (量词)

在实际使用中常需要匹配同一类型的字符多次,比如匹配 11 位的手机号,我们不可能将 [0-9] 写 11 遍,此时可以使用 Quantifiers 来实现重复匹配。

{n}:匹配 n 次

{n,m}:匹配 n-m 次

{n,}:匹配 >=n 次

?:匹配 0 || 1 次

*:匹配 >=0 次,等价于 {0,}

+:匹配 >=1 次,等价于 {1,}

Metacharacters(元字符)

常见的元字符有:

\d:匹配任意数字,等价于 [0-9]

\D:匹配任意非数字字符;\d 的补集

\w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_]

\W:匹配任意非基本拉丁字母表中的字母和数字,以及下划线;\w 的补集

\s:匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格

\S:匹配一个非空白符;\s的补集

\b:匹配一个零宽单词边界,如一个字母与一个空格之间;例如,/\bno/ 匹配 “at noon” 中的 “no”,/ly\b/ 匹配
“possibly yesterday.” 中的 “ly”

\B:匹配一个零宽非单词边界,如两个字母之间或两个空格之间;例如,/\Bon/ 匹配 “at noon” 中的 “on”,/ye\B/
匹配 "possibly yesterday."中的 “ye”

\t:匹配一个水平制表符(tab)

\n:匹配一个换行符(newline)

\r:匹配一个回车符(carriage return)

  • 53
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值