Ваш первый регулярное выражение содержит класс символов ([^<]|^)
. Это положительное совпадение, поэтому все, что попадется в класс персонажа, будет заменено на replaceAll()
.
Ваш второй регулярное выражение использует только lookaround, который только проверяет условие и не соответствует:
(?<!<)<(?!<)
Это прекрасно работает для меня: оно не соответствует <<
. Возможно, вы можете опубликовать фрагмент кода и некоторый ввод / вывод, который не будет вести себя так, как вы ожидаете?