正则表达式 学习笔记

正则表达式

特殊字符描述例子字符串正则式结果
^匹配输入字符串的开始位置“Hello World”^HelloHello
$匹配输入字符串的结束位置“Hello World”World$World
?0次或1次“Helllllllo”Hel?oHelo
*0次或多次“Helllllllo”Hel*oHelllllllo
+1次或多次“Helllllllo”Hel*oHelllllllo
.匹配除换行符之外的任何单个字符“Helllllllo”.+Helllllllo
|“Hello,World”Hello( |,)WorldHello,World
{n}匹配确定的n次“Helllo”Hel{3}oHelllo
{n,}至少匹配n次“Helllllllo”Hel{3,}oHelllllllo
{n, m}至少匹配n次,至多匹配m次“Helllllllo”Hel{1,10}oHelllllllo
\b匹配单词边界“Hello World”llo\b \bWorllo Wor
\B反义,匹配非单词边界“Hello World”ell\BHello
\d匹配数字0737-5686123\d{4}-\d{6}0737-568612
\D反义,匹配非数字“Hello World”\D+Hello World
\w匹配字母、数字、下划线hello_world777\w+hello_world777
\W反义,匹配非字母、数字、下划线0737—5686123\W+
\s匹配空格“Hello World”Hello\sWorldHello World
\S反义,匹配非空格“hello_world”hello\Sworldhello_world
[0-9]字符组,匹配中括号内存在的字符“5686123”[0-9]+5686123
[^0-9]反义,匹配括号内以外的字符“5686xxx123”[^0-9]+xxx

捕获分组

  • 用圆括号将一个正则表达式模式或部分模式括起来,会使相关匹配存储到一个临时缓冲区中
  • 所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,比如 \1 访问第一个缓存区

例如:正则 (\w+)/b/s/1,对于 “Hello Hello” ,第一个 (\w+) 捕获到的字符Hello,/1 访问第一个缓存区,同样匹配 Hello,于是结果为 “Hello Hello”,而 “Hello World” 则无法匹配

不捕获分组

非捕获分组,与捕获分组的区别在于,该匹配不需要捕获后存储供以后使用。

  1. (?:pattern)
    ?: 标明该分组是非捕获分组,没有其他含义。在使用或字符 “( | )” 来组合一个模式的各个部分是很有用。
    例如:industr(?:y|ies) 相对 industry|industries 更简略

  2. (?=pattern)
    ?= 除表示非捕获分组外,有正常肯定预查的功能,在任何匹配 pattern 的字符串开始处匹配字符串。即如果后边是 pattern 则匹配。
    例如,Windows(?=95|98|NT|2000) 能匹配 “Windows2000” 中的 “Windows”,但不能匹配 “Windows3.1” 中的 “Windows”。

  3. (?!pattern)
    ?! 非捕获分组,正向否定预查,在任何不匹配 pattern 的字符串开始处匹配字符串。即如果后面不是 pattern 则匹配
    例如:Windows(?!95|98|NT|2000) 能匹配 “Windows3.1”中的“Windows”,但不能匹配 “Windows2000” 中的 “Windows” 。

  4. (?<=pattern)
    ?<= 非捕获分组,反向肯定预查,与正向肯定预查类似,但是方向相反。即如果前面是 pattern 则匹配。
    例如,(?<=95|98|NT|2000)Windows 能匹配 “2000Windows” 中的 “Windows”,但不能匹配 “3.1Windows” 中的 “Windows”。

  5. (?<!pattern)
    ?<! 非捕获分组,反向否定预查。即**如果前面不是 pattern 则匹配。
    例如,(?<=95|98|NT|2000)Windows 能匹配 “3.1Windows” 中的 “Windows”,但不能匹配 “2000Windows” 中的 “Windows”。

例子参考:https://www.cnblogs.com/allen2333/p/9835654.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值