1.2. 正则表达式的通用语法

正则表达式本身,算是一种语言,其有自己一定的规则。

只不过每种其他语言在实现正则表达式的时候,却又对有些规则有些自己的定义。

此处,只是列出一些最基本,各个语言中都通用的一些规则。

表 1.1. 正则表达式中通用字符匹配规则

特殊字符等价于含义解释提示
. 表示任意字符(除了换行符\n以外的任意单个字符) 
^ 表示字符串的开始 
$ 表示字符串行末或换行符之前 
*{0,无穷多个}0或多个前面出现的正则表达式贪婪原则,即尽量匹配尽可能多个
+{1,无穷多个}1或多个前面出现的正则表达式贪婪原则,即尽量匹配尽可能多个
?   
*?,+?,?? 使*,+,?尽可能少的匹配最少原则
{m} 匹配m个前面出现的正则表达式 
{m,n} 匹配最少m个,最多n个前面出现的正则表达式贪婪原则,即尽量匹配尽可能多个
{m,n}? 匹配最少m个,最多n个前面前出现的最少原则
\ 后接那些特殊字符,表示该字符;或者后接已经定义好的特殊含义的序列对于已经定义好的特殊序列,详细解释参考表 1.4 “正则表达式中已定义的转义字符序列”
[] 指定所要匹配的字符集,可以列出单个字符;或者是一个字符范围,起始和结束字符之间用短横线-分割; 
| A|B,其中A和B可以是任意正则表达式,其中也支持更多的抑或A|B|C|… 
(...) 匹配括号内的字符串实现分组功能,用于后期获得对应不同分组中的字符串


正则中,还有一些,相对比较通用的标记(flag),又称修饰符(modifier),限定符,或者说不同的模式

表 1.2. 正则表达式中通用的限定符

限定符类型/模式英文叫法含义解释
忽略大小写模式ignore case mode默认不加此参数,是大小写区分的。加了此参数,则不区分大小写
单行模式single line mode默认'.'是不匹配回车换行的。加了此参数,则使得'.'也匹配回车换行,这就使得原本,中间包含了换行的,多行的字符串,变成了单行的效果。
多行模式multiple line mode默认情况是:^只匹配,整个(中间包含了回车换行的,多行的)字符串的开始,同理,$只匹配整个字符串的末尾。而加上次参数,则^也匹配每个'\n'==newline=换行符之后的那个位置,表示下一行的开始,同理,$也匹配,换行符之前的那个位置,表示之前一行的结束位置
松散模式verbose mode/relax regular expression/ignore Whitespace默认的正则,都是连续的写在一起的,可以叫做,紧凑型的正则。加上此参数,则运行你在,原先是紧凑的正则中间,加上一些空格或tab,用于对齐格式,以及一些注释内容,目的在于方便别人看懂你写的正则,所以,相对紧凑型的写法,叫做,松散正则。此时,松散正则里面的空白符,即回车,换行,tab,都被忽略,如果想要表达回车换行本身,需要转义。松散正则中的注释,当然在解析的时候,也会被忽略掉的。
区域模式locale mode根据当前的local不同,会影响到其他一些正则的含义,比如\w, \W, \b, \B, \s and \S
Unicode模式unicode mode根据Unicode字符编码去匹配,会影响到其他一些正则的含义,比如\w, \W, \b, \B, \d, \D, \s and \S


相应的,不同语言中,上述的限定符写法,也不太相同。总结如下

表 1.3. 正则表达式中通用的限定符的不同语言中的写法

不同语言/限定符写法忽略大小写模式单行模式多行模式松散模式区域模式Unicode模式
C#RegexOptions.IgnoreCaseRegexOptions.SinglelineRegexOptions.MultilineRegexOptions.IgnorePatternWhitespaceRegexOptions.CultureInvariant(此点待确认)未知
Pytonre.IGNORECASE/re.Ire.DOTALL/re.Sre.MULTILINE/re.Mre.VERBOSE/re.Xre.LOCALE/re.Lre.UNICODE/re.U
Perlismxlu


表 1.4. 正则表达式中已定义的转义字符序列

特殊序列/已定义的字符含义等价于含义解释提示
\数字 表示前面用括号()括起来的某个组group 
\A 表示字符串的开始 
\b 匹配空字符,但只是,一个单词word的,除了开始或者结束位置的,的空字符 
\B\b含义取反0或多个前面出现的正则表达式 
\d[0-9]匹配单个数字(0到9中的某个数字) 
\D[0-9]的取反非数字的单个字符,即除了0-9之外的任意单个字符 
\s[ \t\n\r\f\v]匹配单个空白字符,包括空格,水平制表符\t,回车\r,换行\n,换页\f,垂直制表符\v英文单词一般叫做blankspace,简称space,所以此处的s就是space的意思
\S\s的含义取反匹配非空白字符之外的单个字符 
\w[a-zA-Z0-9_]匹配单个的任何字符,数字,下划线 
\W\w的含义取反匹配单个的,非字母数字下划线之外的字符 
\Z 匹配字符串的末尾 


下面介绍一些通用的规则: