正则表达式其实就是字符串的模式匹配,就是一般化的子字符串查找过程。使用正则表达式的目的即是在一长串文本中寻找指定的模式文本。
模式(pattern)这个词在字符串查找中有特别的指代,指要查找的子字符串。
基本操作
正则表达式关于模式文本的描述中,有三种基本操作。任何复杂的表达式都是通过这三种基本操作组成的。
连接操作 :紧密相连的字符串就是连接操作,比如 AB ABCD 匹配的字符串就是{"AB"}和{"ABCD"}
或操作 :指定多种可能的匹配,用符号|表达,比如A|B匹配 {"A","B"} A|E|I|O|U 匹配 {"A","E","I","O","U"}
闭包操作:闭包指将模式和自身连接任意多次(包括零次),用符号*表达,比如AB*指一个A和任意个B组成的模式,A*B指任意个A和一个B组成的模式。
优先级
优先级:闭包 > 连接 > 或
可以使用括号()改变默认的优先级顺序。
(AB)* 指由AB连接任意次的模式
(A|B)(C|D) 指 {"AC","AD","BC","BD"}
缩略写法
新引入一些额外的规则,这些都是三种基本操作的衍生。
字符集描述符
用一个或几个字符表示一个字符集会很方便。
通配符,能够表示任意一个字符, 用. 表示。比如A.B表示A开头B结束的任意三位的模式串。
指定集合,包含在 [] 中,[AEIOU] 表示由任意个元音大写字母组成的的模式。
范围集合,包含在 [] 中,用 - 分隔。比如[A-Z]表示由任意个大写字母组成的模式,[0-9]表示由任意个数字组成的模式。
补集,包含在 [] 中,首字母为 ^ 。比如[^AEIOU] 表示由任意个辅音大写字母组成的的模式。
闭包的简写
闭包指将模式自身复制任意多次,可以灵活的指定重复次数和范围。
+ 表示至少复制一次,(AB)+ 的原始写法是(AB)(AB)*
? 表示重复0次或者1次,(AB)? 的原始写法是 ε|AB。(ε是空字符串,所有字符串都包含ε)
{} 表示确定的重复次数,或者指定重复次数的范围,(AB){3} 的原始写法是(AB)(AB)(AB),(AB){1-2} 的原始写法是 (AB)|(AB)(AB)
转义字符
像是 \ . | * ( ) 这些字符是用来构造正则表达式的元字符。使用\开头的转义字符将元字符和普通字符区分开。
\\ 表示 \ 本身,还有一些其他的转义字符,\t 表示一个制表符,\n 表示一个换行符, \s 表示一个任意空白字符。
延申和拓展
正则表达式模式匹配的起源是Unix的命令grep,这个命令会打印出和给定正则表达式匹配的所有输入行。
现在,正则表达式也内置于许多编程语言和文本处理工具中,如 JavaScript、Python、Java、Perl 等。
文章评论