2016-02-18 3 views
0

Я использую следующий г, чтобы определить, если слово появляется в тексте, соблюдение границ слов:Определите, если строка имеет внутренние границы слов

if (Pattern.matches(".*\\b" + key + "\\b.*", text)) { 
    //matched 
} 

Это будет соответствовать книге на учебнику но не на описание товара facebook.

Теперь, я хотел бы сделать обратное: определить, есть ли текст ввода внутри границы слова.

E.g. mutually-collaborative (ПРАВИЛЬНО, есть граница слова внутри) и mutuallycollaborative (НЕПРАВИЛЬНО, поскольку внутри нет границы слова).

Если граница была пунктуации это будет работать:

if(Pattern.matches("\\p{Punct}", text)) { //check punctuations 
     //has punctuation 
} 

Я хотел бы проверить границы слов в целом, например, '-' и т. д.

Любая идея?

+4

Вы должны добавить примеры, так как ваш вопрос неясен. –

+0

Если вы хотите найти слова, содержащие 'key', просто используйте' '(? S). * (?: \\ B" + key + "|" + key + "\\ B). *" '(С '.matches()'). –

+0

@CasimiretHippolyte, что непонятно? Я хотел бы соответствовать любой границе слова. Я привел пример дефиса ('-') и знаков препинания. Это примеры границ слов, но я ищу общий случай. –

ответ

1

Вы хотите проверить, содержит ли данная строка границы слова внутри строка. Обратите внимание, что \b соответствует в начале и конце непустой строки. Таким образом, вам нужно исключить эти альтернативы. Просто используйте

"(?U)(?:\\W\\w|\\w\\W)" 

Таким образом, вы убедитесь, что строка содержит комбинацию слова и символы, отличные от слова.

См IDEONE demo:

String s = "mutuallyexclusive"; 
Pattern pattern = Pattern.compile("(?U)(?:\\W\\w|\\w\\W)"); 
Matcher matcher = pattern.matcher(s); 
if (matcher.find()){ 
    System.out.println(matcher.group() + " word boundary found!"); 
} else { 
    System.out.println("Word boundary NOT found in " + s); 
} 

Просто некоторые ссылки на то, что word boundary может соответствовать:

Есть три различных положения, которые квалифицируются как границы слова:

  • Перед тем, первый символ в строке, если первый символ является символом слова.
  • После последнего символа в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой не является символом слова.

Так, с \w\W|\W\w, мы исключаем первые 2 ситуации.

+0

В чем смысл '(? U)'? – Shafizadeh

+0

Это встроенный модификатор ['Pattern.UNICODE_CHARACTER_CLASS'] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#UNICODE_CHARACTER_CLASS), создающий' \ w' и '\ W' Unicode известно. –

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