Может кто-нибудь предложить, как я могу улучшить свое регулярное выражение, чтобы избежать
StackOverflowError
Да, я могу дать вам два решения, вам просто нужно посмотреть на вашу проблему с другой стороны.
Вот краткий анализ вашей проблемы и быстрое решение, вы можете использовать это регулярное выражение вместо (.*?\"\s+)\bOR\b(\s+application.*?)
:
Решение одно
String inputStr = //that long String
String regex = "(.*?\"\\s+)\\bOR\\b(\\s+application.*?)";
String replacedStr = inputStr.replaceAll(regex, "$1||$2");
System.out.println(replacedStr);
Я заметил, что ИЛИ, которое вы хотите заменить, существует после "
ans space
OR
* application
, мое регулярное выражение будет соответствовать этому ИЛИ и заменять его.
Вывод для короткого примера, он даст вам тот же результат для длинного:
application.path="EXCEL.exe" || application.path="EXCELSIOR.exe" || application.path="XYZ OR ABC.exe"
^^ ^^ ^^ ^^
Решение два
Если вы используете Java 9+, вы можете использовать это регулярное выражение application.path=(\"(.*?)\")
, чтобы сопоставить каждую вещь, такую как application.path="something here"
, собрать результат с ||
String regex = "application.path=(\"(.*?)\")";
String text = Pattern.compile(regex)
.matcher(inputStr).results().map(MatchResult::group)
.collect(Collectors.joining(" || "));