System.out.println("aaa 88888c".matches(".{3}\\b\\d{5}.")); 有问题,把3改成4就正确了
这个正则表达式,前边是三个字母,接着是一个空格,但是却是错误的,把3改为4,就正确,
----总是理解不好,请高手讲一下这是为什么?背后的原理是什么?
这个正则表达式,前边是三个字母,接着是一个空格,但是却是错误的,把3改为4,就正确,
----总是理解不好,请高手讲一下这是为什么?背后的原理是什么?
System.out.println("aaa 88888c".matches(".{4}\\b\\d{5}.")); ---true
why??????????
进一步说明:"\b" 与 "^" 和 "$" 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 "\w" 范围,另一边是 非"\w" 的范围。\b代表字与字中间那个看不见的东西,如:
here is a word
那么,这句中有好几个\b, 每个单词的前后都有一个\b.
所以你用 \bhere\b 可以匹配上面这个here,但如果here 不是一个单词,而是一个单词的一部分,如adheread,这样的话,用here可以匹配,用\bhere\b就不能区配了,因为ad后面没有\b. 所以 adhere 中的here 不会被匹配。
总结:\b 就是用在你匹配整个单词的时候。 如果不是整个单词就不匹配。 你想匹配 I 的话,你知道,很多单词里都有I的,但我只想匹配I,就是“我”,这个时候用\bI\b。
对于本题:
由于\b本身不匹配任何字符,所以如果写成(".{3}\\b\\d{5}.")的话,aaa后面的空格就没有匹配,所以是false。
当然你写成System.out.println("aaa 88888c".matches(".{3}\\b.\\d{5}."));也是对的。
System.out.println("aaa 88888c".matches(".{3}\\b\\d{5}."));
这个我知道,
三个字符+一个空格+四个数字+一个字母
正则式(".{3}配对前三个字符才对,为何用(".{4}配对啊?---这个是我要问的问题?
(".{4}匹配aaa和空格
\\s还匹配空格,
----这样不就空格匹配两次了??????
System.out.println("aaa 88888c".matches(".{4}\\b\\d{5}.")); ---true三个字符+一个空格+四个数字+一个字母
如果用了{4}就不用\\s了,否则用\s匹配空白符(包括空格)