Java Regex将提供的单词与特殊字符匹配

时间:2017-02-17 08:18:32

标签: java regex pattern-matching

我正在尝试使用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)”

更多例子

  1. 我的输入字符串是:“Point [-99.73586,28.38092]”然后我应该可以搜索“ - 99.73586,28.38092”
  2. 我的输入字符串是:“Point [-99.73586,28.38092]”然后我应该可以搜索“[ - 99.73586,28.38092]” < / LI>
  3. 我的输入字符串是:“Rench RenchY”然后我应该可以搜索“Rench”但RenchY不应该是搜索结果的一部分。 那么我该如何处理这类案件。

2 个答案:

答案 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,并且消除了与正则表达式回溯机制相关的不必要开销。