关于正则表达式边界适配器“\B”的问题!
小弟初学Java,遇到以下问题不明,在CSDN中找了半天也没找到答案,或者是那答案以我目前的水平看不懂!小弟才学到正则表达式,属于基础中的基础,所以希望有达人用我目前能够听懂的方式帮我解惑!
今天发现一问题,就是在正则表达式中,我们知道边界匹配器中\w的意思是非字母边界!
但是在我进行了验证之后,发现,这一边界适配器的定义有问题:源代码如下:
/**
* <pre>
* \w 单词字符:[a-zA-Z_0-9]
*
* 边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
* </pre>
* */
public class Demo1 {
public static void main(String[] args) {
String str = "aaddccd";
System.out.println(str.matches("\\b\\w+\\b"));//true
String str2 = "aaddccd.";
System.out.println(str2.matches("\\b\\w+\\B"));//flase
String str3 = "aaddccd!";//按照\w的定义,!应该是非单词字符
System.out.println(str3.matches("\\b\\w+\\B"));//flase
String str4 = "~";//同理:按照\w的定义,~应该是非单词字符
System.out.println(str4.matches("\\B"));//flase
String str5 = "|";
System.out.println(str5.matches("\\B"));//flase
}
}
其中我进行了多方测试,均不能返回true!
根据API文档的翻译,我们知道\w表示的意思:
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
也就是说像“~、!、#”等符号都是非单词符号的,应该能够使用\B进行验证的。如上面的代码,我专门测试了\B(如第4、5个例子),发现还是返回的false。
不知道这是怎么回事,是JDK的定义问题?还是我未发现的小细节出了问题?求达人解惑,以上代码大家可以拷贝试一下!
正则表达式
\B
边界适配器
------解决方案--------------------\\b并不是用来匹配具体字符的。。它是匹配一个"位置"
如果你了解正则表达式的"环视",那应该就知道是什么意思了
举个简单的例子
Pattern pattern = Pattern.compile("\\w+\\b");
Matcher matcher = pattern.matcher("aaabbcc ff");