正则表达式\b 的问题

zhongjiekangping 2009-06-30 04:03:00

The AirSyncBase namespace adheres to the following XML schema definition(XSD):
用模式\bXML schema definition\(XSD\)\b 为什么匹配不到结果

用\bXML schema definition\b 就可以

\bmatchStr\b 查找的意思是可以整体匹配字符串matchStr, 但为什么我不能整体匹配 XML schema definition(XSD)

希望高手给我明示
...全文
427 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
typeof 2009-07-01
  • 打赏
  • 举报
回复
过客说得对,\b匹配单词边界,也就说匹配这样的位置:一侧是单词字符(\w),另一侧不是(可以是\W,也可以是开始(^)或结束($))。

另外,在[]中,\b表示退格符。比如 [a-z\b] 匹配小写英文字母或退格符。
-过客- 2009-07-01
  • 打赏
  • 举报
回复
有或者没有这种说法并不太好,容易让人混淆
“\b”是零宽度的,匹配的是一个位置,开始,结束或者两个字符之间的是位置,确切的说,应该是“\b”是否能够成功匹配这个位置

\b是单词边界,但什么才是单词,由哪些字符组成,各种语言的表现并不一致的,通常指由\w包含的字符组成的一个子串为单词
详细的可参考我4楼帖的帖子
看到多个版块问到了\b的问题,这几天整理一下\b相关的内容,写篇博客吧
wackyboy 2009-07-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lxcnn 的回复:]
\b指的是单词边界,通常来说,相当于它所在位置的一侧是\w,而另一侧是\W,也就是
(? <=\W)(?=\w)或者(? <=\w)(?=\W)
对于\w,不同的语言表示的范围不一样,通常来说,在支持ASCII的语言中,如JavaScript中,\w等价于[a-zA-Z0-9_],而对于.NET这种支持unicode的语言,\w同时还支持unicode字符集,如中文


楼主所给的正则
\bXML schema definition\(XSD\)\b
后面的\b是要匹配“)”后面的位置,而我们看一下源字符串
(XSD):
“)”后面这个位置,左侧是“)”,右侧是“:”,这显然不满足\b的要求,所以楼主的正则是无法匹配成功的
\bXML schema definition\(XSD\)
这样就可以了,实际上后面的\b是没有意义的

\bXML schema definition\b
这个前面的\b不用解释了,后面的\b匹配的是字符“n”后面的位置,我们看一下源字符串
definition(XSD):
“n”后面的位置,左侧是字母“n”,右侧是“(”,这是满足\b的要求的,所以能够匹配成功
[/Quote]

顶过客
不过我觉得\b是一个单词字符和非单词字符之间的那个虚拟的位置

"adf>dwe" a和d d和f d和w w和e 中间并没有\b 而 f和> >和d 之间是有\b的

string input = "adf>dwe";
Match m = Regex.Match(input,@"(\b\w|\w\b|\b\w\b)");
while(m.Success)
{
Console.WriteLine(m.Value);
m = m.NextMatch();
}
//这里的结果只是 f 和 d
//这就说明 a和d d和f d和w w和e 中间并没有\b 而 f和> >和d 之间是有\b的


-过客- 2009-06-30
  • 打赏
  • 举报
回复
关于“\b”更详细的细节可以参考下面这个帖子我10楼的回复
正则表达式的问题
十八道胡同 2009-06-30
  • 打赏
  • 举报
回复
如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w。

\w匹配字母或数字或下划线或汉字等。
十八道胡同 2009-06-30
  • 打赏
  • 举报
回复
\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。

-过客- 2009-06-30
  • 打赏
  • 举报
回复
\b指的是单词边界,通常来说,相当于它所在位置的一侧是\w,而另一侧是\W,也就是
(?<=\W)(?=\w)或者(?<=\w)(?=\W)
对于\w,不同的语言表示的范围不一样,通常来说,在支持ASCII的语言中,如JavaScript中,\w等价于[a-zA-Z0-9_],而对于.NET这种支持unicode的语言,\w同时还支持unicode字符集,如中文


楼主所给的正则
\bXML schema definition\(XSD\)\b
后面的\b是要匹配“)”后面的位置,而我们看一下源字符串
(XSD):
“)”后面这个位置,左侧是“)”,右侧是“:”,这显然不满足\b的要求,所以楼主的正则是无法匹配成功的
\bXML schema definition\(XSD\)
这样就可以了,实际上后面的\b是没有意义的

\bXML schema definition\b
这个前面的\b不用解释了,后面的\b匹配的是字符“n”后面的位置,我们看一下源字符串
definition(XSD):
“n”后面的位置,左侧是字母“n”,右侧是“(”,这是满足\b的要求的,所以能够匹配成功

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧