1.正则表达式是强大、高效、便捷的文本处理工具;
2.正则表达式由两种字符构成:元字符和文字;
3. ^ 脱字符,代表一行的开始;
$ 美元符号,代表一行的结束;
4.普通字符都有“接下来是”的意思,如abc,相当于: aand then band then c;(前提是在字符组以外)
5. [ ] 字符组
5.1 匹配若干字符之一 [....] 内部表示希望匹配的字符;
在字符组[ ]内部,元字符'-'(连字符)表示一个范围;例: H[1-6]与H[123456]是一样的;
只有在字符组内部且不是在字符组的开头,连字符才是元字符,否则只是普通的字符。
分析: ^cat$、^$、^ ^cat$ :行开头,然后是cat,然后是行末尾;意思是只包含cat的行; ^$ :行开头,然后是行结尾。意思是空行; ^ :无意义,因为每一行都有行开头,所以所有行都能匹配;
5.2 排除型字符组
[^...] 匹配任何未列出的字符;字符组中开头的^表示“排除”;
在字符组外部,^表示一个行锚点,但在字符组内部且位于字符组的开头时,^就是一个元字符;
记住:排除型字符组表示“匹配一个未列出的字符”,而不是“不要匹配列出的字符”;
一个字符组,即使是排除型字符组,也需要匹配一个字符!
元字符在字符组里面和外面的意义是不一样的,元字符的定义规则是不一样的。
6.用点号.匹配单个任意字符
元字符 . (dot)在字符组外面是用来匹配任意单个字符的。
7.多选结构
|,元字符“或”;例:gr[ea]y,还可以写作 grey|gray,或gr(a|e)y
()括号用来划定多选结构的范围.(正常情况下括号也是元字符)
8.字符组基本上可以算是一门独立的微型语言(例如对于元字符,它有自己的规定),而多选结构是“正则表达式语言主体”的一部分。
9.忽略大小写
-i :参数规定在匹配时不区分大小写
10.单词分界符
“元字符序列” \< 和\>,可以使用它们来匹配单词分界的位置。它们是单词版的^和$,分别用来匹配单词的开头和结束位置。
单词的分界如下图示例:
11.可选项元素
元字符 ?代表可选项。把它加在一个元素(一个字符或括号中的内容)的后面,就表示这个元素可以出现也可以不出现。区间量词表示:{0,1}
例:用colou?r 匹配color或colour;或用4(th)?代替4th|4
12.其它量词:重复出现
元字符 + 表示“之前紧邻的元素出现一次或多次”;区间量词表示:{1,}
元字符 * 表示“之前紧邻的元素出现任意多次,或者不出现”;区间量词表示:{0,}
?、+、* 这3个元字符,统称为量词,它们限制了所有作用元素的匹配次数;
? : 0或1 次 + : ≥1次 * :≥0次
14.括号及反向引用
反向引用是正则表达式的特性之一,它容许我们匹配与表达式先前部分匹配的同样的文本。
在第一个表达式中我们可以使用多个括号,再用\1、\2、\3等来表示第一、第二、第三组括号匹配的文本(而不是括号内的那个范围)。
比如在([a-z])([0-9])\1\2中如果[a-z]匹配的是“the”,则\1就代表“the”,而不是说\1代表[a-z]。
15.使用转义符“反斜线” \ 可以匹配本身是元字符的字符,此法适用于所有的元字符,不过在字符组内部无效。
16.匹配包含字母、数字、下划线 但不能以数字开头的变量明: [a-zA-Z_][a-zA-Z_0-9]*
匹配引号内的字符串:"[^"]*"
17.正则(regex)
子表达式:通常指括号内的表达式或分号分隔的多选分支。严格说来每个字符都算子表达式。
II.入门实例拓展
1.非捕获型括号:(?:...),表示只分组不捕获
\b 在正则表达式中是匹配一个单词分界符的,但在字符组中,它匹配一个退格符。Perl使用\b代表/<或/>
\s 能表示所有表示“空白字符”的字符组,其中包括空格符、制表符、换行符和回车符
/..../ 斜线用来标注正则表达式的边界,它们本身不属于正则表达式。
2.Perl和其它流派的正则表达式提供的简记法:
\t 制表符
\n 换行符
\r 回车符
\s 任何“空白”字符
\S 除了“空白”字符之外的任何字符
\w [a-zA-Z0-9],\w+可用来匹配一个单词
\W [^a-zA-Z0-9]
\d [0-9]
\D [^0-9]
3. .* 通常用来表示“一组任何字符”
Perl以及其它语言都把数字、字母和下划线当作单词的一部分。
4.环视结构不匹配任何字符,只匹配文本中的特定位置。
顺序环视(从左至右):
肯定型顺序环视:(?=...) 子表达式能够匹配右侧文本
否定型顺序环视:(?!...) 子表达式不能够匹配右侧文本
逆序环视(从右至左):(JavaScript不支持逆序环视)
肯定逆序环视:(?<= ...) 子表达式能够匹配左侧文本
否定逆序环视:(?<! ...)子表达式不能够匹配左侧文本