Хорошо, поэтому я работаю над проблемой, которую я бы предпочел решить с помощью регулярных выражений, я тестирую большинство своих выражений регулярных выражений в 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
Именно это я и намеревался сделать.
Я голосую только за использование шаблона \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)|('|,|!))|$)"
)
Вы понимаете, что то, что вы говорите, не имеет ничего общего с моим ответом, верно?
Неважно, я думал о цитатах (доу) Отлично, спасибо за ваше время.
Вы проверяли документацию по регулярным выражениям Java? Процессоры Regex не все одинаковы