正则表达式基础语法速查

正则表达式基本语法笔记

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值