这一节,介绍在正则表达式中,如何针对位置,来使用设计的正则表达式。关于位置匹配,按照词、段落、行的类别来分的话,可以分为单词边界匹配、字符串边界匹配与分行匹配三种。
单词边界匹配
\b
限定符,来指定单词的边界。
即单个\b
用在单词前面,表示匹配一个单词的开头,\b
用在单词后面,表示匹配一个单词的结尾。两个\b
配合来使用,用来匹配一个单词的开始以及结尾。
正则表达式
\bcat\b
表示只匹配cat这个单词,cat前后有其他字母和数字的,比如cat1、acat将不能被匹配。
根据上图结果显示,可以看出,匹配到了单词cat
、也匹配到了cat.
、还包括<cat>
中的cat。
❗️注意:
\b
限定符匹配的是能构成单词的字符,也就是字母、数字和下划线。所以在上面的正则表达式匹配结果中可以看到,对于单词前后为其他符号、特殊符号的也能进行匹配。
💡额外:
如果要不匹配单词边界,可以使用限定符\B
。
字符串边界匹配
^
元字符,用来表示字符串的开头。
$
元字符,用来表示字符串的结尾。
- 正则表达式
^cat
表示要匹配整个字符串的开头,也就是第一行最开始的位置。
根据上图结果显示,第一行的cat
被匹配,第二行的cat
则未被匹配。
- 正则表达式
cat$
表示要匹配整个字符串的结尾,也就是最后一行的末尾位置。
根据上图结果显示,最后一行中,只有末尾的cat
被匹配,而最后一行前面的cat
则未被匹配。
分行匹配
(?m)
记号,放在正则表达式的最前面,表示启动分行匹配模式。
为什么要有分行匹配?分行匹配能干什么?
当想要针对每行的特定的位置上的字符进行查询时,当想要对多行进行同时查找时,这时候分行匹配就派上了用场。
最常见的例子就是,在很多流行编程语言中使用的注释符号\\
,使用分行匹配,可以匹配到每行中的字符。当然也可以通过设计正则表达式,匹配到这些行中的特定位置。
- 正则表达式
(?m)^cat
该正则表达式表示,匹配cat开头每一行。
根据上图显示,正则表达式匹配到了以cat开头的行。
2.正则表达式
(?m)^cat\d+
该正则表达式表示,要匹配cat开头,后面跟着至少一个数字的每一行。
根据上图显示,正则表达式匹配到了以cat1、cat2、cat1234等cat加数字开头的行。
本节使用的实例代码
cat
category
cat. X 10.9 Maverick
cat X 10.10 Yosemite
cat1 X 10.10 Yosemite
cat2 X 10.10 Yosemite
Cat X 10.11 A Capita
category 10.12 Sierra
Category 10.13 Moj_
cat12@qq.com
cat1234@qq.com
cat_123@qq.com
Catate@outlook.com
acat
cat_sa@sina.com
<cat>A</cat>ads<cat>B</cat>
cat cat
「参考」
《正则表达式必知必会》