Вы можете использовать границы без слов:
final String regex = "\\B\\$\\w+\\$\\B";
Шаблон будет соответствовать, только если $abc$
не предшествует и сопровождается символами слова. Смотрите regex demo .
См. Демонстрация Java :
String regex = "\\B\\$\\w+\\$\\B";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("$abc$ cde$efg$hij pqr");
while (matcher.find()){
System.out.println(matcher.group(0));
} // => $abc$
Помимо границ, не относящихся к словам, вы можете использовать границы пробела , если вы хотите сопоставлять только символы пробела или начало / конец строки:
String regex = "(?<!\\S)\\$\\w+\\$(?!\\S)";
Или используйте однозначные границы слов (как я их называю):
String regex = "(?<!\\w)\\$\\w+\\$(?!\\w)";
Отрицательный просмотр (?<!\\w)
провалит совпадение, если слово char будет найдено слева от текущего местоположения, а отрицательный просмотр (?!\w)
не даст совпадение, если слово char будет найдено справа от текущее местоположение.