正则表达式快速笔记

元字符速查

在这里插入图片描述

技术点

  • 懒惰匹配
    +,*后加上?构成懒惰匹配, 总是在匹配到第一个符合项时停止
  • 位置匹配
    • 单词边界: 为了匹配完整单词, 使用\b在单词的前后进行限制, \b的含义是一个非单词字符和一个单词字符(字母数字下划线)的边界, \B取反
    • 字符串边界: 用^$表示字符串的开始位置与结束位置. 有的正则表达式实现支持通过(?m)特殊字符实现按行匹配, 通过该特殊字符使得$以换行符为结尾. 有的实现支持用\A\Z来表示一个字符串的开始与结束, 但这两个符号的含义不会受到(?m)的影响, 依然匹配整个文本的首尾.
  • 子表达式
    ()包含起来的一组表达式,称为子表达式, 它是正则表达式中的变量的单位. 子表达式也可以进行嵌套
  • 回溯匹配用于查找和替换
    目的是保证前后一致, 通过\num表示前面已经匹配的第num个子表达式
    \0匹配整个表达式
<H1> hello word </H1> // 正确
<H1> hello word </H2> //错误 不应匹配
对应的表达式匹配1
<[Hh]([1-9])>.+?</[Hh]\1>

    回溯匹配在替换中的使用, 利用\1或$1引用之前的正则表达式的作为变量
    回溯匹配在替换中, 可以用形如\U $1 \E的形式对原子表达式的内容进行大小写转换.

  • 前后查找
    前后查找又称为零宽匹配, 使用(?=)匹配一些字符, 这些字符出现在被查找字符紧挨着的后面但是不消费这些字符
    后向查找(?<=), 支持的实现更少. 对前后查找还可以取非
  • 嵌入条件
    • 根据一个回溯引用进行条件处理: (?(regex)true_express|false_express)
    • 根据一个前后查找进行条件处理:
// 回溯引用匹配
(<[Aa]\s+[^>]+>\s*)?[Ii][Mm][Gg]\s+[^>]+>(?(1)\s*</[Aa]>)
若(<[Aa]\s+[^>]+>\s*)被匹配时, 按照(?(1)\s*</[Aa]>)需要继续匹配
// 前后查找匹配
\d{5}(?(?=-)-\d{4})
匹配的逻辑是 如果5位数字后出现了-就必须继续匹配4位数字才属于成功匹配, 注意-在向前匹配中被匹配但并没有消费, 所以(?=-)后面还要有个-来消费它

Tips:

grep技巧

  • grep的三种模式-G基础, -E拓展, -P perl格式, 其中默认基础版本中, ?, +, {, |, (, )的含义是字面的, 要想发挥他们的正则中的语义需要加\转义, 在拓展格式中, 以上字符自带特殊语义, 匹配字面量时才用转义
  • grep默认是按行匹配, 所以不存在(?m)的用法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值