Regex Expression работает в Notepad ++, но не в Java - PullRequest
0 голосов
/ 31 мая 2019

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

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

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

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

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

1 Ответ

1 голос
/ 31 мая 2019

Я голосую за использование шаблона \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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...