Вы можете исправить свой шаблон, заменив группу захвата ([^\\w-\\.])
на шаблон "(?![\\w.-])"
с отрицательным прогнозом , не потребляющий шаблон, который читает , проверяет строку, но не добавляет соответствующую подстроку к значению совпадения.
Вы можете использовать
Pattern.compile(replaceEntry + "(?![\\w.-])")
См. демонстрационную версию regex .
Или, если список replaceEntry
может содержать элемент с специальными метасимволами регулярных выражений , используйте Pattern.quote()
, чтобы экранировать их и рассматривать как буквенные символы:
Pattern.compile(Pattern.quote(replaceEntry) + "(?![\\w.-])")
Если replaceEntry всегда заканчивается пробелом или концом строки, вы можете просто положиться на границу пробела:
Pattern.compile(Pattern.quote(replaceEntry) + "(?!\\S)")
См. regex demo .
(?!\S)
Отрицательный взгляд требует пробела или конца строки непосредственно справа от текущего местоположения.
При замене не забудьте использовать группу 0, все совпадение:
String newCode = code.replaceAll(matcher.group(), newEntry);
^^
Если нет дополнительных строк кода, вы можете уменьшить три строки
Pattern pattern = Pattern.compile("(" + replaceEntry + ")([^\\w-\\.])");
Matcher matcher = pattern.matcher(code);
String newCode = code.replaceAll(matcher.group(1), newEntry);
до
String newCode = code.replaceAll(Pattern.quote(replaceEntry) + "(?![\\w.-])", newEntry);