正则表达式四
不区分大小写模式(Case-Insensitive)
不区分大小写是匹配模式的一种。当我们把模式修饰符放在整个正则前面时,就表示整个正则表达式都是不区分大小写的。模式修饰符是通过 (? 模式标识) 的方式来表示的。
在不区分大小写模式中,由于不分大小写的英文是 Case-Insensitive,那么对应的模式标识就是 I 的小写字母 i,所以不区分大小写的 cat 就可以写成 (?i)cat。
到这里我简单总结一下不区分大小写模式的要点:
不区分大小写模式的指定方式,使用模式修饰符 (?i);
修饰符如果在括号内,作用范围是这个括号内的正则,而不是整个正则;
使用编程语言时可以使用预定义好的常量来指定匹配模式。
点号通配模式(Dot All)
单行的英文表示是 Single Line,单行模式对应的修饰符是 (?s)
多行匹配模式(Multiline)
^匹配整个字符串的开头,$ 匹配整个字符串的结尾。多行匹配模式改变的就是 ^ 和 $ 的匹配行为。
多行模式的作用在于,使 ^ 和 $ 能匹配上每行的开头或结尾,我们可以使用模式修饰符号 (?m) 来指定这个模式。
注释模式(Comment)
正则中注释模式是使用 (?#comment) 来表示。
不区分大小写模式,它可以让整个正则或正则中某一部分进行不区分大小写的匹配。
点号通配模式也叫单行匹配,改变的是点号的匹配行为,让其可以匹配任何字符,包括换行。
多行匹配说的是 ^ 和 $ 的匹配行为,让其可以匹配上每行的开头或结尾。
注释模式则可以在正则中添加注释,让正则变得更容易阅读和维护。
们来做一个小练习吧。HTML 标签是不区分大小写的,比如我们要提取网页中的 head 标签中的内容,用正则如何实现呢?
(?si)<head(\s(profile|accesskey|class|contenteditable|contextmenu|data-[\w\d]|dir|draggable|dropzone|hidden|id|lang|spellcheck|style|tabindex|title|translate)(=".*?")?)*>.*<\/head>
(?si)<head(.*?)>.*<\/head>