TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
徒弟:前面几节课跟师傅学习了字符组,括号的作用,
还有什么呢?
师傅:还有好多呀,例如锚点!
问题引出:
public class GeneralOne {
public static void main(String[] args) {
String str = "This sentence contains word cat";
String regex = "cat";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()){
System.out.println("找到 cat !");
}else{
System.out.println("没有找到 cat !");
}
}
}
运行结果:
找到 cat !
判断句子中是否存在cat的单词。
那么我们查找的是cat这个子字符串,还是cat这个单词
为了验证这一点,我们在t后面加个e
String str = "This sentence contains word cate";
运行结果:
找到 cat !
奇怪,程序报告找到cat,而句子中是不包含单词cat的。说明只能匹配字符串cat,而不能匹配单词cat
再试试:
String str = "This sentence contains word cate";
String regex = "\scat\s";
要求cat两端出现空白字符,运行结果:
没有找到 cat !
此时,正确发现不包含单词cat
如果是这样呢?
String str = "This sentence contains word cat";
String regex = "\scat\s";
运行结果:
没有找到 cat !
按道理,应该是包含的,只是在末尾没有空格!
如果这样子呢:
String str = "This sentence contains word "cat"";
String regex = "\scat\s";
当然,实际情况,可能会更加复杂,需要一种办法解决:锚点
锚点
作用:规定匹配的位置
形式: 单词分界符锚点
规定在反斜线的一侧必须出现的单词,另一侧不可以出现单词字符。
例子:
public class GeneralTwo {
public static void main(String[] args) {
String[] strings = {"This sentence contains word cat","This sentence contains word "cat"","This sentence contains word vacation","This sentence contains word "cate""};
String regex = "\bcat\b";
for(String str:strings){
System.out.println("处理句子:"+str);
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()){
System.out.println("找到 cat !");
}else{
System.out.println("没有找到 cat !");
}
}
}
}
运行结果:
处理句子:This sentence contains word cat
找到 cat !
处理句子:This sentence contains word "cat"
找到 cat !
处理句子:This sentence contains word vacation
没有找到 cat !
处理句子:This sentence contains word "cate"
没有找到 cat !
本文出自 “leolee” 博客,请务必保留此出处http://jooben.blog.51cto.com/253727/318583
|
|