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

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

End :

Author : Ggicci

Java 学习笔记整理,谢谢阅读,有误请指正!

转载于:https://www.cnblogs.com/ggicci/archive/2012/09/18/2690414.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值