深⼊浅析正则表达式中的B和b
对于正则表达式的中\B和\b 有些地⽅会出现弄不懂的情况
或许你看了下⾯这篇博客你就能够对\B和\b认识加深了
根据查看API可以知道 \B和\b都是边界匹配符
先说说\b这个单词边界吧!竟然想了解⾸先必须清楚什么叫单词边界!我们可以以\b为分割来探究⼀下单词边界
import Matcher;
import Pattern;
public class matcher1 {
public static void main(String[] args) {
String str="(中⽂问号?123英⽂)问号?我是华丽[的制表符\t]我是华丽{的空格符我是华丽}的换⾏符\n";
String rex="\\b";
Pattern pattern=Patternpile(rex);
Matcher matcher=pattern.matcher(str);
String [] result=pattern.split(str);
for(String string:result){
System.out.println("分割的字符串:"+"["+string+"]");
}
}
}
运⾏结果
分割的字符串:[(]
分割的字符串:[中⽂问号]
分割的字符串:[?]
分割的字符串:[123]
分割的字符串:[]
分割的字符串:[英⽂]
分割的字符串:[)]
分割的字符串:[问号]
分割的字符串:[?]
分割的字符串:[我是华丽]
分割的字符串:[[]
分割的字符串:[的制表符]
分割的字符串:[ ]]
分割的字符串:[我是华丽]
分割的字符串:[{]
分割的字符串:[的空格符]
分割的字符串:[ ]
分割的字符串:[我是华丽]
分割的字符串:[}]
分割的字符串:[的换⾏符]
分割的字符串:[
]
从这些分割的字符串中我们可以知道单词边界就是单词和符号之间的边界
这⾥的单词可以是中⽂字符,英⽂字符,数字;符号可以是中⽂符号,英⽂符号,空格,制表符,换⾏
下⾯我们看⼀个例⼦
import Matcher;
import Pattern;
public class matcher1 {
public static void main(String[] args) {
String str=" 2 ";
String rex="\\b2\\b";
Pattern pattern=Patternpile(rex);
Matcher matcher=pattern.matcher(str);
if(matcher.matches()){
System.out.println("匹配成功");
}else{
System.out.println("匹配不成功");
}
}
}
在没有看上⾯分割的例⼦前估计很多⼈包括我都会认为这运⾏的结果是匹配成功
经过分割的例⼦后就知道了空格并不是边界空格与数字2之间的那个才叫边界所以运⾏结果不⾔⽽喻肯定是匹配不成功当如果你这样写就运⾏出来就是匹配成功
import Matcher;
import Pattern;
public class matcher1 {
public static void main(String[] args) {
String str="2";
String rex="\\b2\\b";
Pattern pattern=Patternpile(rex);
Matcher matcher=pattern.matcher(str);
if(matcher.matches()){
System.out.println("匹配成功");
}else{
System.out.println("匹配不成功");
}
}
}
\b的⽤法
⼀般来说\b不⽤来判断当前字符串是否符合某种规则
⼀般我们都⽤\b来进⾏获取
import Matcher;
import Pattern;
public class matcher1 {
public static void main(String[] args) {
String str=",,,,呵呵,,,,";
String rex="\\b呵呵\\b";
Pattern pattern=Patternpile(rex);
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.up());
}
}
}
运⾏结果
呵呵1
\B的⽤法
了解了\b的⽤法我们再来说说\B \B是⾮单词边界
也就说\B=[^\b]//符号^是⾮的意思1
\b是单词与符号的边界那⾮单词与符号的边界的其它都是\B
所以我们的猜想\B是符号与符号,单词与单词的边界
当然猜想需要认证!下⾯我们写⼀个例⼦来证明⼀个!
import Matcher;
import Pattern;
public class matcher1 {
public static void main(String[] args) {
String str="123456我是JAVA{,、;‘asd";
String rex="\\B";
Pattern pattern=Patternpile(rex);
Matcher matcher=pattern.matcher(str);
String [] result=pattern.split(str);
for(String string:result){
System.out.println("分割的字符串:"+string);
}
}
}
运⾏结果
分割的字符串:1
分割的字符串:2
分割的字符串:3
分割的字符串:4
分割的字符串:5
分割的字符串:6
分割的字符串:我
分割的字符串:是
分割的字符串:J
分割的字符串:A
分割的字符串:V
分割的字符串:A{ //单词与符号之间的边界不算\B的边界
分割的字符串:,
分割的字符串:、
分割的字符串:;
分割的字符串:‘a
分割的字符串:s
分割的字符串:d
事实证明\B作为⾮单词边界确实是单词与单词,符号与符号之间的边界\B⼀般也是⽤来获取字符串的
import Matcher;
import Pattern;
public class matcher1 {
public static void main(String[] args) {
String str=",,,,,和呵呵,,,,,";
String rex="\\B呵\\B";
Pattern pattern=Patternpile(rex);
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.up());
}
}
正则匹配是什么}
因为字符与字符之间的边界
所以运⾏的结果是
呵
补充:
正则表达式中\b和\s有什么区别
字符串:abcsdsadas abc asdsadasdabcasdsa
使⽤\sabc\s和\babc\b都能匹配中间的abc,这种⽅法不是重复了么,/s是匹配空格回车等得,/b⽹上教程说得不清楚什么字符边界什么意思。
不⼀样
\babc\b匹配的是"abc" \sabc\s匹配的不是"abc", 前后还带空格" abc " \b只是匹配字符串开头结尾及空格回车等的位置, 不会匹配空格符本⾝
例如"abc sdsadasabcasdsadasdabcasdsa",
\sabc\s不能匹配,\babc\b可以匹配到"abc"
\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就是反过来,代表⾮字间。类似\d代表数字, \D代表⾮数字。
总结
以上所述是⼩编给⼤家介绍的正则表达式中的\B和\b ,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论