2017-02-17 6 views
0

Я пытаюсь сопоставить строку с помощью класса Java Pattern.Java Regex в соответствии с предоставленным словом со специальными charcters

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(); 
    } 

Это будет работать, если у меня есть спички строка, которая не содержит никаких специальных символов, как ({[и др

Я могу найти «RANCH» но не «RANCH (EAGLEFORD) "

несколько примеров

  1. Пусть говорят моя входная строка: " Точка [-99.73586,28.38092]» тогда я должен быть в состоянии найти „-99.73586,28.38092“
  2. Пусть говорим моя входная строка: „Точка [-99.73586,28.38092]“ тогда я должен быть в состоянии искать «[-99.73586,28.38092]»
  3. Пусть говорим моя входная строка: «Ренч RenchY» тогда я должен быть в состоянии искать «Ренч» но RenchY не должна быть частью результат поиска. Так как я могу обращаться с этим типом корпуса.
+5

Что такое ввод образца? каков ожидаемый результат?, что вы пытаетесь сделать? – TheLostMind

+0

Что такое граница слов для вас? Является ли «слово» просто куском небелых символов? Обратите внимание, что ')' не является символом слова, '\ b' после того, как ему понадобится слово char сразу после скобки. Другая проблема заключается в том, что вам нужно использовать 'Pattern.quote (matchWord)'. –

+0

Давайте попробуем пояснить это с помощью подсказки: попробуйте 'Pattern.compile (". * (?

ответ

0

Пример использования специальных символов ({}) в регулярных выражениях

Строка stringToSearch = "Некоторые длительные строки Я пытаюсь RANCH (EAGLEFORD) и ХУТОРА {EAGLEFORD}";

Pattern p1 = Pattern.compile("RANCH\\s[(){}\\w]+"); 

Matcher m = p1.matcher(stringToSearch); 

while (m.find()) 
{ 
    System.out.println(m.group()); 
} 

выход:

ХУТОРА (EAGLEFORD) ХУТОРА {EAGLEFORD}

0

Если вы планируете, чтобы соответствовать ваши ключевые слова не прилагается слова символов (буквы, цифры или подчеркивания), использование (?<!\w) и (?!\w) поисковые запросы вместо \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) lookarounds:

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 предпочтительнее, так как вам не нужен начальный/конечный .* и устраняет ненужные накладные расходы, связанные с механизмом обратного отслеживания регулярных выражений.

 Смежные вопросы

  • Нет связанных вопросов^_^