“\b”匹配单词边界,不匹配任何字符。“\b”匹配的只是一个位置,这个位置的一侧是构成单词的字符,另一侧为非单词字符、字符串的开始或结束位置。“\b”是零宽度的。基本上所有的资料里都会说“\b”是单词边界,但是关于“单词”的范围却是少有提及。通常情况下,正则表达式中所谓的“单词”,就是由“\w”所定义的字符所组成的子串。“\b”表示所在位置的一侧为单词字符,另一侧为非单词字符、字符串的开始或结束位置,也就相当于(?<!\w)(?=\w)|(?<=\w)(?!\w)思考:以下写法为什么不等价于“\b”(?<=\W)(?=\w)|(?<=\w)(?=\W)2\w的范围即然涉及到“\w”,那就要先考察一下它的范围。在支持ASCII码的语言中,如JavaScript,“\w”等价于[a-zA-Z0-9_];在支持Unicode的语言中,,默认情况下,“\w”除可以匹配[a-zA-Z0-9_]外,还可以匹配一些Unicode字符集,如汉字,全角数字等等。几乎所有常见的语言都遵循这样一个规律,只有Java是个例外。在Java中,“\w”的表现是比较奇怪的,Java是支持Unicode的,但Java的正则中的“\w”却是等价于[a-zA-Z0-9_]的。先来看一下“\w”在几种语言中匹配的例子JavaScript<scriptlanguage="javascript">varstr="abc_123中文_d3=efg汉字%";varreg=/\w+/g;vararr=(reg);if(arr!=null){for(vari=0;i<;i++){(arr[i]+"<br/>");}}</script>/*--------JavaScript中输出--------abc_123_d3Efg*/C#stringtest="abc_123中文_d3=efg汉字%";MatchCollectionmc=(test,@"\w+");foreach(Matchminmc){+=+"\n";}/*--------C#中输出--------abc_123中文_d3efg汉字*/JavaStringtest="abc_123中文_d3=efg汉字%";Stringreg="\\w+";Matcherm=pile(reg).matcher(test);while(()){(());}/*--------Java中输出--------abc_123_d3Efg*/可以看到,“\w”在Java中的输出和JavaScript中是一样的,都是只支持ASCII字符。3\b的范围常见语言中“\w”的范围确定了,那么是不是可以认为“\b”的匹配范围与“\w”也是一致的呢?再看下下面的例子:源字符串:abc_123中文_d3=汉字efg正则表达式:.\<scriptlanguage="javascript">varstr="abc_123中文_d3=efg汉字%";varreg=/.\b./g;vararr=(reg);if(arr!=null){for(var
正则表达式——斜杠b-单词边界 来自淘豆网www.taodocs.com转载请标明出处.