本帖最后由 王晓明 于 2013-1-13 21:34 编辑
今天发现一问题,就是在正则表达式中,我们知道边界匹配器中\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的定义问题?还是我未发现的小细节出了问题?
求达人解惑,以上代码大家可以拷贝试一下!
|