2014-10-25 2 views
1

Как я могу определить шаблон в Java, чтобы определить

$foo 

как слово в тексте?

Ниже приведен пример, чтобы лучше объяснить. мне нужно получить следующий результат:

if word == $foo 
then 

$FOO yyyy -> found 
$foo yyyy -> found 
aaa aaaa $foo -> found 
yyyy $fooxxx -> not found 
yyyy $foo!!! -> Found 
$fooaaaa -> not found 
$foo: aaa -> found 
A.foo -> not found 
A .foo -> not found 
A?foo -> not found 
A foo -> not found 

Я попробовал этот код, но он не работает:

Pattern word_pattern = Pattern.compile("\\b\\$"+word+"\\b"); 
if(word_pattern.matcher(text).find()){ 
     System.out.println("FOUND!"); 
     return true; 
}else{ 
    System.out.println(":("); 
    return false; 
} 
+1

Почему он нашел для 'ааа аааа $ Foo' но не' ааа $ Foo'? –

+0

Извините, это ошибка, я ее исправил –

ответ

2

Я не совсем ясно, о вашем требовании, но это вероятно, будет работать для вас :

Pattern word_pattern = Pattern.compile("\\B\\$" + word + "\\b", Pattern.CASE_INSENSITIVE); 

\B тесты на границе без слов. Начиная с $ после \B не должно быть символа до $ (начало строки), либо символ до $ должен быть символом без слова, чтобы он соответствовал.

Вы необходимо проверить, что word содержит только допустимые символы, которые я предполагаю, что это будет [a-zA-Z0-9_], что определение \w и. И точное решение может отличаться, если ваше определение действительного символа отличается от [a-zA-Z0-9_].

(я забыл о регистронезависимых согласованиях и напомнил ответ Pshemo в)

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