正则表达式

正则表达式 知识量:10 - 22 - 55

6.1 匹配边界><

边界问题- 6.1.1 -

在单词匹配中,如果设定查找某个单词,那么除了该单词会被匹配外,包含该单词相应字母的更长的单词也会匹配,例如:查找单词man。

示例文本:

man,woman,manage,human.

正则表达式:

man

结果:

MatchPositionLength
man03
man63
man103
man193

由此可见,除了man本身被匹配外,woman、manage和human中的“man”也被匹配了,而这可能不是我们想要的。

要想解决以上问题,需要使用边界限定符。

匹配单词边界- 6.1.2 -

匹配单词的边界可以使用限定符\b,\b用于匹配一个单词的开始或结尾。

1、匹配完整的单词。

例如:匹配单词man。

示例文本:

man,woman,manage,human.

正则表达式:

\bman\b

结果:

MatchPositionLength
man03

使用限定符\b后,就可以只匹配man单词了。

2、除了以上用法外,还可以只限定单词的开始或结尾。

例如:从以上示例文本中匹配以man开始的单词。

正则表达式:

\bman

结果:

MatchPositionLength
man03
man103

manage中的man也被匹配了。

注意:本质上来说,限定符\b匹配的是位置,这个位置位于一个能够用来构成单词的字符(\w)和一个不能用来构成单词的字符(\W)之间。

匹配字符串边界- 6.1.3 -

除了匹配单词的边界,还可以匹配字符串的边界。匹配字符串的边界要使用元字符^和$。^用于定义字符串的开头;$用于定义字符串的结尾。

例如:匹配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.*".*"

结果:

MatchPositionLength
Bob says:"Hello.Is that Tom? "030
Bob says:"My name is Bob."6426

如果要匹配Bob说的第一句话,就需要限定字符串的开始边界。

修改正则表达式为:

^Bob.*".*"

结果为:

MatchPositionLength
Bob says:"Hello.Is that Tom? "030

注意:有些正则表达式的实现(即:有些编程语言)还支持使用\A来定义字符串的开始;使用\Z来定义字符串的结束。