正则表达式-匹配模式

正则表达式中全局模式、单行模式和多行模式的学习

Posted by 李伟博 on June 21, 2010

在某些情况下有可能看的在正则表达式中有g、s和m等标记,也有可能是其三者的结合,例如gs、gm、gsm等,这些标记是什么含义呢?其实他们分别对应如下的含义:g为全局模式;s为单行模式;m为多行模式。下面就来举例说明

1. 全局模式

期望对要匹配的字符串匹配多次

1.1 下图中虽然使用了全局模式g,但是没有匹配出任何的字符,这是因为这个正则匹配工具https://regexr.com在默认的情况是单行匹配(将要匹配的字符串看成成一行,即使要匹配的字符串存在于多行上)

正则表达式-全局模式-01.png

1.2 加上多行匹配模式后,效果如下。可以看到命中了两行。这里 “THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.”是要匹配的字符串,但是这里使用了全局模式g,因此会对要匹配的字符串进行多次匹配

正则表达式-全局模式-02.png

1.3 去掉全局匹配模式g后,可以看到对要匹配的字符串”THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.”只匹配了一行

正则表达式-全局模式-03.png

2. 单行模式

将要匹配的字符串看成是一个字符串,即使要匹配的字符串存在于多行上

2.1 例如:^/THE匹配下面整段字符串的开始,\?$匹配整段字符串的结尾

正则表达式-单行模式-01.png

2.2 此时及时加上了全局匹配模式g,效果也是一样的,因为符合要求的字符串只有一处

正则表达式-单行模式-02.png

3. 多行模式

要匹配的字符若含有多行的话,单独对每一行进行正则匹配

3.1 例如下面的正则表达式匹配字符串”THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.”,此时使用了多行模式会将下面的字符串看成多行,分别对每一行进行正则匹配;由于没有使用全局匹配,因此,即使下面的字符串中有两行满足正则表达式的要求,第二行中满足要求的字符串也不会被匹配

正则表达式-多行模式-01.png

3.2 若要在多行模式下匹配所有满足正则表达式要求的行的话,可以加上全局模式。此时可以看到所有满足正则表达式要求的行都被匹配出来了

正则表达式-多行模式-02.png