正则表达式笔记

文章目录

  在正则表达式中,被赋予特殊含义的字符称为元字符。处理正则表达式的软件被称作正则引擎。一些主要的元字符在不同的正则引擎上是相同的,但也有很大一部分元字符在不同的正则引擎上是不同的。不同的元字符势必会导致不同的正则表达式,当下主流的正则表达式可以分为以下三类:

  • POSIX Basic Regular Expression:POSIX 基本正则表达式,简写作 BREs。由于是 POSIX 的标准,所以 Unix/Linux 衍生平台上的大部分软件都支持 BREs。
  • POSIX Extended Regular Expression:POSIX 扩展的正则表达式,简写作 EREs。相较于 BREs,EREs 在 Unix/Linux 衍生平台上被支持的范围更大。
  • Perl Regular Expression:Perl 正则表达式,简写作 PREs。Perl 是较早支持正则表达式的语言,其正则引擎的速度也优于其它语言,因此 PREs 无疑是领头羊的存在。JAVA、Python 等当下流行的编程语言,它们的正则表达式也在很大程度上借鉴了 PREs。

  因此,要想熟练使用 Unix/Linux 衍生平台,BREs 和 EREs 是必备的技术,毕竟二者有着 POSIX 光环。BREs 和 PREs 仅有匹配功能,而 PREs 具有三种模式,分别是:匹配、替换、转化。本文首先在匹配方面来比较 BREs、EREs 和 PREs,而后再分别介绍 PREs 的替换模式和转化模式。

匹配

  首先介绍几个概念:在正则表达式中被赋予特殊含义的符号被称为元字符。按照正则表达式的语法写成的字符串被称为模式串(pattern string)。

元字符表
功能为演示功能而作的假设在 BREs 中的写法在 EREs 中的写法在 PREs 中的写法
转义字符\\\
代指任意字符(不包括\n\r...
代指几个字符中的任意一个字符假设代指abc中的一个字符[abc][abc][abc]
代指指定范围内的任意一个字符假设代指从az中的一个[a-z][a-z][a-z]
代指除指定字符之外的任意一个字符假设代指除小写字母和123之外的字符[^a-z123][^a-z123][^a-z123]
代指两个字符中的任意一个假设代指xy中的任意一个不支持x|yx|y
代指由同一字符组成的序列,且序列长度为确定值假设代指仅由a组成的序列,且长度为4a\{4\}a{4}a{4}
代指由同一字符组成的序列,且序列长度的最小值为确定值;最大值不限假设代指仅由b组成的序列,且长度最小值为5b\{5,\}b{5,}b{5,}
代指由同一字符组成的序列,且序列长度的最小值和最大值都为确定值假设代指仅由c组成的序列,且长度最小为6;最大为10c\{5,10\}c{5,10}c{5,10}
代指由同一字符组成的序列,且序列长度最小为零,最大不限假设代指仅由d组成的序列,且长度为非负整数d*d*d*
代指由同一字符组成的序列,且序列长度最小为一,最大不限假设代指仅由e组成的序列,且长度为正整数不支持e+e+
代指由同一字符组成的序列,且序列长度为零或一假设代指仅由f组成的序列,且长度零或一不支持f?f?
代指每行行首字符前的虚拟字符(正则引擎在每行的行首字符前虚拟了一个字符)^^^
代指每行行尾字符后的虚拟字符(正则引擎在每行的行尾字符后虚拟了一个字符)$$$
代指每个单词首字符前的字符(单词指由大小写字母、数字和下划线构成连续序列)不支持\<不支持
代指每个单词尾字符后的字符不支持\>不支持
代指每个单词词首前或词尾后的字符(单词指由大小写字母、数字和下划线构成连续序列)不支持不支持\b
将某一模式串包装成一个整体,嵌入到另一模式串中,成为一个子模式\(\)()()
在本模式串中,引用前面的一个子模式(能被引用的子模式只有九个,按从前向后的顺序从19依次编号)假设引用从前往后排第6的子模式\6\6不支持
代指空字符不支持不支持\0
代指换行符不支持不支持\n
代指回车符不支持不支持\r
代指水平制表符不支持不支持\t
代指垂直制表符不支持不支持\v
代指换页符不支持不支持\f
代指任意不可见字符(包括:空格、换行、回车、水平制表、垂直制表和换页)不支持不支持\s
代指任意可见字符不支持不支持\S
代指任意数字字符不支持不支持\d
代指任意非数字字符不支持不支持\D
代指任意单词字符(包括大写字母、小写字母、数字和下划线)不支持不支持\w
代指任意非单词字符不支持不支持\W
使用两位十六进制 ASCII 码来代指字符假设代指A(其 ASCII 码为0x41不支持不支持\x41

替换

转化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值