第八章 以正则表达式进行匹配
1、 m// 为模式匹配操作符,其中“//”为模式定界符,也可以替换为其它成对的定界符(如:m{}、m[]、m()或m<>等)或不成对的单一定界符(如:m,, 、m!! 、m^ ^ 、 m# # 等),一般采用模式中不会出现的符号作为定界符,如果采用默认的“//”,则可以省略前面的“m”;
2、 选项修饰符(option modifier letter)指可以单个或多个组合起来附加在某个正则表达式结尾的定界符右边的特殊字符,用以改变正则表达式的默认行为;常见的有:
a) /i 模式匹配时不区分大小写;
b) /s 让通配符 .(句点)可以匹配换行符;
c) /x 可以在模式拼写中间随意加上空白(包括换行),也可以进行注释(#开头),此时如果想匹配空白字符本身,则需要使用 /s ;
3、 默认情况下,模式匹配进行时会从字符串的开头一直向后进行而无视字符间的关系(如单词开头或结尾、字符串开头或结尾),而利用锚点则可以指定模式匹配时的位置;常见的有:
a) ^ (插入记号) 用来标示字符串的开头;
b) $ (美元符) 用来标示字符串的结尾;
c) /b 单词边界锚点,用来匹配一个单词(由字母、数字或下划线组成,而非指“正确”的英文单词)的头尾两端(需要为头尾分别指定,也可以只标示一边从而只匹配首部或尾部);
d) /B “非单词”边界锚点,匹配/b不能匹配的任何位置;
4、 在Perl中,可以使用模式直接匹配$_;如果要手动指定匹配的目标,则需要使用绑定操作符“=~”;绑定操作符的优先级较高;
5、 Perl中,可以在正则表达式中进行双引号形式的内插,即可以在模式中使用标量变量,如/^($what)/,其中$what是个标量变量,其值依程序要求发生改变时匹配模式亦跟着改变;
6、 模式匹配时,正则表达式引擎会将每个圆括号内的模式所匹配到的内容暂时记忆下来,而每一份暂时记忆的内容都可以使用匹配变量进行引用;匹配变量都是标量变量,它们的命名方式括号的次序依次为$1、$2、$3、……;有多少组圆括号就有多少个匹配变量;匹配变量不同于正则表达式中的“回溯引用”(也叫反向引用),回溯引用引用的是模式匹配尚未完成时的字符串,而匹配变量引用的则是模式已经全部匹配完成后的结果;
7、 匹配变量中的内容通常只会维持到下一次模式匹配成功之时,因此,如果想在程序的数行之外使用某次匹配的结果,最好将匹配变量复制到自定义的某个普通变量中;
8、 无论模式里是否有“记忆圆括号”,都会有3个“自动匹配变量”产生,它们是“$` (模式在字符串里实际匹配到的字符之前的内容)、 $& (模式实际匹配到的内容)和 $’ (模式在字符串里实际匹配到的字符之后的内容)”;但使用它们可能会让程序运行变慢;
9、 常见元字符的优先级:
a) 最高级是圆括号“()”,用于划分组及存储;
b) 第二级是量词(quantifier),即*、+、?及{};
c) 第三级是锚点(anchor)与序列(sequence),即/b、^ 、$、/B及彼此相邻的项目;
d) 最低一级是“择一匹配”的操作符——竖线“|”;