正则表达式 知识量:10 - 22 - 55
在单词匹配中,如果设定查找某个单词,那么除了该单词会被匹配外,包含该单词相应字母的更长的单词也会匹配,例如:查找单词man。
示例文本:
man,woman,manage,human.
正则表达式:
man
结果:
Match | Position | Length |
---|---|---|
man | 0 | 3 |
man | 6 | 3 |
man | 10 | 3 |
man | 19 | 3 |
由此可见,除了man本身被匹配外,woman、manage和human中的“man”也被匹配了,而这可能不是我们想要的。
要想解决以上问题,需要使用边界限定符。
匹配单词的边界可以使用限定符\b,\b用于匹配一个单词的开始或结尾。
1、匹配完整的单词。
例如:匹配单词man。
示例文本:
man,woman,manage,human.
正则表达式:
\bman\b
结果:
Match | Position | Length |
---|---|---|
man | 0 | 3 |
使用限定符\b后,就可以只匹配man单词了。
2、除了以上用法外,还可以只限定单词的开始或结尾。
例如:从以上示例文本中匹配以man开始的单词。
正则表达式:
\bman
结果:
Match | Position | Length |
---|---|---|
man | 0 | 3 |
man | 10 | 3 |
manage中的man也被匹配了。
注意:本质上来说,限定符\b匹配的是位置,这个位置位于一个能够用来构成单词的字符(\w)和一个不能用来构成单词的字符(\W)之间。
除了匹配单词的边界,还可以匹配字符串的边界。匹配字符串的边界要使用元字符^和$。^用于定义字符串的开头;$用于定义字符串的结尾。
例如:匹配Bob说话的句子。
示例文本:
Bob says:"Hello.Is that Tom? " Jan says:"Sorry ,but he is out." Bob says:"My name is Bob." Jan says:"Hello Bob.Do you want to leave a message."
正则表达式:
Bob.*".*"
结果:
Match | Position | Length |
---|---|---|
Bob says:"Hello.Is that Tom? " | 0 | 30 |
Bob says:"My name is Bob." | 64 | 26 |
如果要匹配Bob说的第一句话,就需要限定字符串的开始边界。
修改正则表达式为:
^Bob.*".*"
结果为:
Match | Position | Length |
---|---|---|
Bob says:"Hello.Is that Tom? " | 0 | 30 |
注意:有些正则表达式的实现(即:有些编程语言)还支持使用\A来定义字符串的开始;使用\Z来定义字符串的结束。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6