注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

G G I C C I

 
 
 

日志

 
 

正则表达式笔记 2 边界符中的单词边界 \b  

2012-09-18 13:24:27|  分类: 正则表达式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Regex :

  • 本文介绍正则表达式中单词边界 \b 的使用
  • 本文正则表达式在 Java 中测试
  • 边界符有 \b, \B, ^, $, \A, \G, \Z, \z,本文只介绍 \b 的用法,其余的将在后期介绍

State :

首先单词字符在正则表达式中定义为 \w 也就是 [a-zA-Z_0-9],所谓的一个单词由1个或1个以上的单词字符组成,多个单词之间由非单词字符隔开。

\b 是一个位置匹配符,它有如下两种含义:

  1. 匹配字符串的首字符前和末字符后面的位置(前提是首字符、末字符是一个单词字符 \w)
  2. 在单词字符 \w 与非单词字符 \W 之间

Sample :

  • differ 是一个单词
  • ggicci_1991 是一个单词
  • fuck! 不是一个单词(存在非单词字符!)
  • 寻找字符串 I am ggicci and I’m powerful! 中的单词:
       1: String source = "I am ggicci and I'm powerful!";
       2: Pattern pattern = Pattern.compile("\\b\\w+\\b");
       3: Matcher matcher = pattern.matcher(source);
       4: while(matcher.find()) {
       5:     System.out.println(matcher.group());
       6: }
       7: 
       8: //输出:
       9: I
      10: am
      11: ggicci
      12: and
      13: I
      14: m
      15: powerful
    解释:(不同单词用不同颜色已经标出,红色箭头代表 \b 所匹配的位置)image

How 2 use ?

什么时候用到 \b 呢?

当我们需要匹配一整个单词的时候。举个例子,如果你要匹配 Ggicci 或者 ggicci 这样的用户名字,在一段字符串里面寻找这样的单词而不是像 ggicci_1991 这种,因为 ggicci_1991 也是单词,而我们不需要这种单词,而是完完整整的独立的 Ggicci 或者 ggicci 单词。 因为在我们用 [Gg]gicci 去匹配的时候,ggicci_1991 里面的 ggicci 也会被匹配出来,这个时候我们就需要用 \b 单词边界符去限定它。代码如下:

  • 如果不用 \b 去限定,那么 ggicci_1991 中的 ggicci 也会被匹配到,虽然 ggicci_1991 才是一个独立的单词,而 ggicci 只是这个单词中的一部分:
       1: String source = "Ggicci was born in 1991 and ggicci_1991 is an account.";
       2: Pattern pattern = Pattern.compile("[Gg]gicci");
       3: Matcher matcher = pattern.matcher(source);
       4: while(matcher.find()) {
       5:     System.out.printf("Matched: %s Index: %d\n", matcher.group(), matcher.end());            
       6: }
       1: //输出:
       2: Matched: Ggicci Index: 6
       3: Matched: ggicci Index: 34
  • 用 \b 去限定,那么 ggicci_1991 中的 ggicci 将不会被匹配到,它只会匹配 Ggicci 或 ggicci 独立的单词:
       1: String source = "Ggicci was born in 1991 and ggicci_1991 is an account.";
       2: Pattern pattern = Pattern.compile("\\b[Gg]gicci\\b");
       3: Matcher matcher = pattern.matcher(source);
       4: while(matcher.find()) {
       5:     System.out.printf("Matched: %s Index: %d\n", matcher.group(), matcher.end());            
       6: }
       1: //输出:
       2: Matched: Ggicci Index: 6

Regex Sina 点击这里Q我 CSDN
Author : Ggicci     本文属于个人学习笔记,如有错误,希望您能指正!转载请注明出处,谢谢 : ) [网易博客]
  评论这张
 
阅读(631)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017