Сначала вы должны попытаться использовать replaceAll(regex, replacement)
вместо replace(literal, replacement)
, поскольку последних работ по литералам только, то есть вы не можете использовать выражение, в то время как бывший использует регулярные выражения найти спички.
Следующее ваше регулярное выражение должно использовать границы слов, например. \bthe\b
где \b
отмечает границу слова.
Наконец, если вы хотите сделать регистронезависимую замену вам необходимо либо обрабатывать возможные случаи в epxression (например \b[tT]he\b
) или переключить выражение в режим регистронезависимого, предваряя его с (?i)
, т.е. (?i)\bthe\b
. Обратите внимание, что выражение [tT]he
было бы не совпадением THE
, в то время как выражение без учета регистра было бы, поэтому в зависимости от ваших требований вам нужно было выбрать тот или иной.
Используя все, что вы получите input = input.replaceAll("(?i)\\bthe\\b", "AAA");
.
Edit:
Согласно Ваш комментарий по этому вопросу вы не хотите использовать границы слов, но только искать для персонажей до и после. Вы можете добиться этого с негативными внешними выражениями, например
. (?i)(?<![a-z])the(?![a-z])
. Обратите внимание, что здесь я использовал довольно простой класс символов [a-z]
, если вам нужно исключить больше символов, которые вам нужно будет расширить.
Приведенное выше выражение будет соответствовать !The
, the
, THE?
и т.д., но не Theatre
или aether
и т.д., так как, если требуется совпадение с не предшествовать символ ((?<![a-z])
) , а не следовать один
((?![a-z])
).
Вы говорите, что это заменяет _ignoring case_? – Tunaki
Если я понимаю вас хорошо, вы хотите заменить его только тогда, когда это автономное слово, но не являетесь частью слова? –
Да, игнорировать случай, когда после или после этого есть символ –