据我所知,您可以使用Pattern.quote来转义由regex保留的字符串中的字符。但我不明白为什么以下不起作用:
String s="and this)";
String ps = "\\b("+Pattern.quote(s)+")\\b";
//String pp = Pattern.quote(pat);
Pattern p=Pattern.compile(ps);
Matcher mm = p.matcher("oh and this) is");
System.out.println(mm.find()); //print false, but expecting true?
当String s= "and this)
更改为String s="and this
时,即没有)
时,它会起作用。我应该如何更改代码,使用")"它也按预期工作?
由于
答案 0 :(得分:2)
使用否定值环视检查关键字前后的非单词字符:
String ps = "(?<!\\w)"+Pattern.quote(s)+"(?!\\w)";
通过这种方式,您仍然可以将s
作为整个单词进行匹配,如果关键字在开头或结尾处包含非单词字符,则不会出现问题。
String s="and this)";
String ps = "(?<!\\w)"+Pattern.quote(s)+"(?!\\w)";
Pattern p=Pattern.compile(ps);
Matcher mm = p.matcher("oh and this) is");
System.out.println(mm.find());
结果:true