java regex转义所有保留字符

时间:2015-10-01 13:53:11

标签: java regex

据我所知,您可以使用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时,即没有)时,它会起作用。我应该如何更改代码,使用")"它也按预期工作?

由于

1 个答案:

答案 0 :(得分:2)

使用否定值环视检查关键字前后的非单词字符:

String ps = "(?<!\\w)"+Pattern.quote(s)+"(?!\\w)";

通过这种方式,您仍然可以将s作为整个单词进行匹配,如果关键字在开头或结尾处包含非单词字符,则不会出现问题。

IDEONE demo

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