正则表达式的一些笔记

基本元件

元字符

  • 特殊单字符
--
.除了换行符的任意字符
\d任意数字
\w任意数字、字母、下划线
\s任意空白
\D任意非数字
\W任意非数字、字母、下划线
\S任意非空白符
  • 空白符
--
\r回车符
\n换行符
\f换页符
\t制表符
\v垂直制表符
\s任意空白符
  • 量词
--
*0到多次
+1到多次
?0到1次
{m}出现m次
{m,}出现至少m次
{m,n}m到n次
  • 范围
--
|或, ab | bc 表示 ab 或 bc
[…]多选一,括号中的单个元素
[a-z]匹配a到z之间任意单元素
[^…]取反,不包括括号中的任意单个元素

量词与贪婪

贪婪模式

表示次数的量词默认是贪婪模式,在贪婪模式下,会尝试尽可能最大长度去匹配。

例子

  • 正则表达式

a*

  • 测试字符串

aaabb

  • 匹配结果
匹配位置匹配内容说明
Match 10-3aaa
Match 23-3空字符串星号(*)代表 0 到多次,匹配 0 次就是空字符串
Match 34-4空字符串
Match 45-5空字符串

非贪婪模式

匹配长度尽可能小,在量词后面加上英文的问号 (?),将贪婪模式变成非贪婪模式.

例子

  • 正则表达式

a*?

  • 测试字符串

aaabb

  • 匹配结果
匹配位置匹配内容说明
Match 10-0
Match 20-1a
Match 31-1
Match 41-2a
Match 52-2
Match 62-3a
Match 73-3
Match 84-4
Match 95-5

独占模式

类似贪婪匹配,满足要求的情况下,尽可能长的匹配,但匹配过程不会发生回溯。具体的方法就是在量词后面加上加号(+)。

例子1

  • 正则表达式

xy{1,3}+z

  • 测试字符串

xyyz

  • 匹配结果

xyyz

例子2

  • 正则表达式

xy{1,2}+yz

  • 测试字符串

xyyz

  • 匹配结果

[]

如果是贪婪模式,先按最长匹配,匹配了yy,下一个是z,z和y不匹配,则从yy回溯,吐出一个y,剩一个y,下一个是y,与y匹配,接着匹配z,可以匹配到xyyz。

分组与引用

分组是将子表达式看成一个整体,在后续查找或替换中引用分组。括号在正则中可以用于分组,被括号括起来的部分“子表达式”会被保存成一个子组,第几个括号就是第几个分组。分组可通过编号或者捕获名称来引用。

--
(正则)捕获分组
(?:正则)非捕获分组
(?P<名称>正则)命名分组

匹配模式

模式描述例子
(?i)不区分大小写模式(?i)cat
(?s)单行模式(?s).+
(?m)多行模式(?m)^the|cat$
(?#comment)注释模式(\w+)(?#word) \1(?#word repeat again)

通常情况下,^ 匹配整个字符串的开头,$ 匹配整个字符串的结尾。多行匹配模式改变的就是 ^ 和 $ 的匹配行为。对于 ^ 和 $ 大部分实现默认不是多行匹配模式,但也有例外,比如 Ruby 中默认是多行模式。

断言

用于匹配位置,而不是文本内容本身。

  • 单词边界
--
\b单词边界
  • 行的开始/结束
--
^匹配行的开始
$匹配行的结束
\A仅匹配整个字符串的开始,不支持多行模式
\Z仅匹配整个字符串的结束,不支持多行模式
  • 环视
--
(?<=Y)X匹配前面是Y的X
(?<!Y)X匹配前面不是Y的X
X(?=Y)匹配后面是Y的X
X(?!Y)匹配后面不是Y的X

正则调试、可视化工具

参考

  • 正则表达式入门课 涂伟忠
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值