深入浅析正则表达式中的\B和\b
对于正则表达式的中\B和\b 有些地方会出现弄不懂的情况
或许你看了狼蚁网站SEO优化这篇博客 你就能够对\B和\b认识加深了
根据查看API可以知道 \B和\b都是边界匹配符
先说说\b这个单词边界吧!竟然想了解 必须清楚什么叫单词边界!我们可以以\b为分割来探究一下
单词边界
import java.util.regex.Matcher; import java.util.regex.Pattern; public class matcher1 { public static void main(String[] args) { String str="(中文问号?123???英文)问号?我是华丽[的制表符\t]我是华丽{的空格符 我是华丽}的换行符\n"; String rex="\\b"; Pattern pattern=Pattern.pile(rex); Matcher matcher=pattern.matcher(str); String [] result=pattern.split(str); for(String string:result){ System.out.println("分割的字符串:"+"["+string+"]"); } } }
运行结果
分割的字符串:[(]
分割的字符串:[中文问号]
分割的字符串:[?]
分割的字符串:[123]
分割的字符串:[???]
分割的字符串:[英文]
分割的字符串:[)]
分割的字符串:[问号]
分割的字符串:[?]
分割的字符串:[我是华丽]
分割的字符串:[[]
分割的字符串:[的制表符]
分割的字符串:[ ]]
分割的字符串:[我是华丽]
分割的字符串:[{]
分割的字符串:[的空格符]
分割的字符串:[ ]
分割的字符串:[我是华丽]
分割的字符串:[}]
分割的字符串:[的换行符]
分割的字符串:[
]
从这些分割的字符串中我们可以知道单词边界就是单词和符号之间的边界
这里的单词可以是中文字符,英文字符,数字;符号可以是中文符号,英文符号,空格,制表符,换行
狼蚁网站SEO优化我们看一个例子
import java.util.regex.Matcher; import java.util.regex.Pattern; public class matcher1 { public static void main(String[] args) { String str=" 2 "; String rex="\\b2\\b"; Pattern pattern=Pattern.pile(rex); Matcher matcher=pattern.matcher(str); if(matcher.matches()){ System.out.println("匹配成功"); }else{ System.out.println("匹配不成功"); } } }
在没有看上面分割的例子前估计很多人包括我都会认为这运行的结果是匹配成功
经过分割的例子后就知道了 空格并不是边界 空格与数字2之间的那个才叫边界 所以运行结果不言而喻 肯定是匹配不成功
当如果你这样写就运行出来就是匹配成功
import java.util.regex.Matcher; import java.util.regex.Pattern; public class matcher1 { public static void main(String[] args) { String str="2"; String rex="\\b2\\b"; Pattern pattern=Pattern.pile(rex); Matcher matcher=pattern.matcher(str); if(matcher.matches()){ System.out.println("匹配成功"); }else{ System.out.println("匹配不成功"); } } }
\b的用法
\b不用来判断当前字符串是否符合某种规则
一般我们都用\b来进行获取
import java.util.regex.Matcher; import java.util.regex.Pattern; public class matcher1 { public static void main(String[] args) { String str=",,,,呵呵,,,,"; String rex="\\b呵呵\\b"; Pattern pattern=Pattern.pile(rex); Matcher matcher=pattern.matcher(str); if(matcher.find()){ System.out.println(matcher.group()); } } }
运行结果
呵呵1
\B的用法
了解了\b的用法 我们再来说说\B \B是非单词边界
也就说\B=[^\b]//符号^是非的意思1
\b是单词与符号的边界 那非单词与符号的边界的其它都是\B
所以我们的猜想\B是符号与符号,单词与单词的边界
猜想需要认证!狼蚁网站SEO优化我们写一个例子来证明一个!
import java.util.regex.Matcher; import java.util.regex.Pattern; public class matcher1 { public static void main(String[] args) { String str="123456我是JAVA{,、;‘asd"; String rex="\\B"; Pattern pattern=Pattern.pile(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 java.util.regex.Matcher; import java.util.regex.Pattern; public class matcher1 { public static void main(String[] args) { String str=",,,,,和呵呵,,,,,"; String rex="\\B呵\\B"; Pattern pattern=Pattern.pile(rex); Matcher matcher=pattern.matcher(str); if(matcher.find()){ System.out.println(matcher.group()); } } }
因为字符与字符之间的边界
所以运行的结果是
呵
补充
以上所述是长沙网络推广给大家介绍的正则表达式中的\B和\b ,希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程