我正在尝试使用Java Pattern类匹配字符串。
private boolean isMatch(String searchSentence, String matchWord) {
String patternText = ".*\\b";
Pattern pattern = Pattern.compile(patternText + matchWord + "\\b.*",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(searchSentence);
return matcher.matches();
}
如果我有匹配字符串,它将不起作用,它不包含任何特殊字符,如({[etc
我能够找到“RANCH”但不能“RANCH(EAGLEFORD)”。
更多例子
答案 0 :(得分:0)
在正则表达式中使用特殊字符({})的示例
String stringToSearch =“我正在尝试RANCH(EAGLEFORD)和RANCH {EAGLEFORD}的一些冗长的字符串”;
Pattern p1 = Pattern.compile("RANCH\\s[(){}\\w]+");
Matcher m = p1.matcher(stringToSearch);
while (m.find())
{
System.out.println(m.group());
}
输出:
RANCH(EAGLEFORD) RANCH {EAGLEFORD}
答案 1 :(得分:0)
如果您计划将未附加 word 字符(字母,数字或下划线)的关键字匹配,请使用(?<!\w)
和(?!\w)
外观代替{{1} }。
\b
如果您只打算查找用空格/字符串的开头/结尾括起的匹配项,请使用private boolean isMatch(String searchSentence, String matchWord) {
Pattern pattern = Pattern.compile("(?<!\\w)" + Pattern.quote(matchWord) + "(?!\\w)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(searchSentence);
return matcher.find();
}
和(?<!\S)
外观:
(?!\S)
不要忘记private boolean isMatch(String searchSentence, String matchWord) {
Pattern pattern = Pattern.compile("(?<!\\S)" + Pattern.quote(matchWord) + "(?!\\S)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(searchSentence);
return matcher.find();
}
您的文字字符串。
最好使用Pattern.quote
,因为您不需要初始/尾随Matcher#find
,并且消除了与正则表达式回溯机制相关的不必要开销。