Выражение регулярного выражения работает в Notepad++, но не в Java

Хорошо, поэтому я работаю над проблемой, которую я бы предпочел решить с помощью регулярных выражений, я тестирую большинство своих выражений регулярных выражений в Notepad++. Это сработало нормально после нескольких настроек, таких как двойное экранирование некоторых вещей для java. исключение при запуске в java, однако оно отлично работает в Notepad ++, идея заключается в том, чтобы этот код мог упоминать другого игрока в игре с выделенным именем.

тлдр; Я пытаюсь заменить первое появление определенного имени в сообщении

Я пытался поискать какое-то время, но я не нашел решения, поэтому я подумал, что могу спросить здесь.

p.getName() просто возвращает строку (имя игрока)

String newmessage = message.replaceFirst("(?i)" + Pattern.quote(p.getName()) + "((?(?=\\s)|('|,|!))|$)", color + p.getName() + Color.toString(Color.getLastColorOf(message)));

Однако выполнение кода вызывает это исключение ...at java.lang.Thread.run(Unknown Source) [?:1.8.0_202] Caused by: java.util.regex.PatternSyntaxException: Unknown inline modifier near index 15 (?i)\QTauCubed\E((?(?=\s)|('|,))|$) ^ at java.util.regex.Pattern.error(Unknown Source) ~[?:1.8.0_202]...

И я не уверен, что он хочет, чтобы я сделал, я не понимаю, как это недействительное регулярное выражение

Это регулярное выражение для Notepad++

(?i)Name((?(?=\s)|('|,|!))|$)

Вышеупомянутое будет соответствовать

Name's r
Name
Name test
Name,
Name!

Но не совпадет

Nametest

Именно это я и намеревался сделать.

Вы проверяли документацию по регулярным выражениям Java? Процессоры Regex не все одинаковы

lurker 31.05.2019 03:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я голосую только за использование шаблона \bName\b вместе с String#replaceFirst:

String input = "Rename here is a Name and here is the same Name again.";
input = input.replaceFirst("\\bName\\b", "blah");
System.out.println(input);

Это печатает:

Rename here is a blah and here is the same Name again.

Теперь я получаю сообщение об ошибке: Caused by: java.util.regex.PatternSyntaxException: Unknown inline modifier near index 19 (?i)\bTauCubed\b((?(?=\s)|('|,|!))|$) ^ at java.util.regex.Pattern.error(Unknown Source) ~[?:1.8.0_202] После изменения на ("(?i)\\b" + p.getName() + "\\b((?(?=\\s)|('|,|!))|$)")

Tau 31.05.2019 03:46

Вы понимаете, что то, что вы говорите, не имеет ничего общего с моим ответом, верно?

Tim Biegeleisen 31.05.2019 03:48

Неважно, я думал о цитатах (доу) Отлично, спасибо за ваше время.

Tau 31.05.2019 04:07

Другие вопросы по теме