关于正则表达式的“\b”

Period One:

今天刚刚开始看正则表达式就遇到一个十分头疼的问题,原文是这样的:

“不幸的是,很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。如果要精确地查找hi这个单词的话,我们应该使用\bhi\b。

\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置”

问题来了,什么叫只匹配一个位置????

 

要知道是一个单词的开头,这个\b是去匹配开头的分隔符还是匹配开头的第一个字母??

 

从网上找到了这样一句话:“如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w(匹配字母或数字或下划线或汉字)”

 

这 句话很隐晦的说出了是去匹配第一个字母,而不是去匹配分割符(我这说的匹配分隔符和上边说的不去匹配任何一个分隔符并不矛盾,因为我经过实验已经进本猜出 了一个单词两边只要没有数字、字母、汉字、下划线就可以认为是独立单词,我说的匹配分隔符是去判断单词前一个字符是不是在这四个之外,是的话就认为是单词 开头)

 

再加上下边的两个例子就可以很清晰的理解这句很隐晦的话。

引用Microsoft   VBScript   Regular   Expression  

Dim myReg As RegExp

Set myReg = New RegExp

 

myReg.Pattern = "a\b.*h.*"

Print myReg.Test("a,chia")

输出的结果为Ture 说明是匹配的a,而不是,

Dim myReg As RegExp

Set myReg = New RegExp

 

myReg.Pattern = "a.* \b h.*"

Print myReg.Test("a,chia")

输出的结果为flash 说明匹配的是h,而不是c

 

这两个例子非常有助于理解\b的真实含义,希望对大家有帮助!

 

接下来就是我保证目前网络中没有的内容了!!!!还有两点需要说明:

1、\b只能匹配字母、数字、汉字、下划线

2、\b就近匹配,比如\bAB 匹配A,AB\b 匹配B;但如果只写一个\b或者在两个字母、数字、汉字、下划线之间有\b时就在所有字符或者两个字母、数字、汉字、下划线之间所有字符去逐个匹配

相信如果你能看懂我上面所写的东西,对于\b的使用算是没有任何问题了!对正则表达式的学习有一个好的开始和基础!

Period Two:

一些符号在表达式中代表抽象的特殊意义:

表达式

作用

^

与字符串开始的地方匹配,不匹配任何字符

$

与字符串结束的地方匹配,不匹配任何字符

\b

匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符

    进一步的文字说明仍然比较抽象,因此,举例帮助大家理解。

    点击测试 举例1:表达式 "^aaa" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "^" 要求与字符串开始的地方匹配,因此,只有当 "aaa" 位于字符串的开头的时候,"^aaa" 才能匹配,点击测试 比如:"aaa xxx xxx"

    点击测试 举例2:表达式 "aaa$" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "$" 要求与字符串结束的地方匹配,因此,只有当 "aaa" 位于字符串的结尾的时候,"aaa$" 才能匹配,点击测试 比如:"xxx xxx aaa"

    点击测试 举例3:表达式 ".\b." 在匹配 "@@@abc" 时,匹配结果是:成功;匹配到的内容是:"@a";匹配到的位置是:开始于2,结束于4。
    进一步说明:"\b" 与 "^" 和 "$" 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 "\w" 范围,另一边是 非"\w" 的范围。

    点击测试 举例4:表达式 "\bend\b" 在匹配 "weekend,endfor,end" 时,匹配结果是:成功;匹配到的内容是:"end";匹配到的位置是:开始于15,结束于18。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章