У меня есть около 200 вызовов функций видаJava Regex для вложенности вызовов функций
markers.add(packageDecl.getPosition(), "package.invalid", this.fullName);
, которые должны быть заменены
markers.add(I18n.createMarker(packageDecl.getPosition(), "package.invalid", this.fullName));
^^^^^^^^^^^^^^^^^^ ^
Они могут иметь произвольное число аргументов функции и аргументы могут быть вложенными вызовами, как показано в примере. Однако дается то, что ;
всегда преуспевает в новой строке.
Я уже пытался это регулярное выражение:
markers\.add\((.*)$
, который позволяет мне раздеть markers.add(
часть и добавить I18n.createMarker(
. Однако я не могу добавить дополнительную закрывающую скобку в конце: ); ->));
.
Вы должны посмотреть режим DOTALL в регулярных выражений документации Java. Нет необходимости в таких хаках, как '(. | \ N)'. –
@AlanMoore Я знаю о флагах регулярных выражений, но я не думаю, что поиск/замещение регулярного выражения, упомянутое Clashsoft в комментарии, поддерживает их. Я ошибаюсь? – Aaron
Вопрос помечен тегом [tag: java], поэтому я предположил, что это был код Java, и он использовал только Eclipse для тестирования. Но независимо от того, сам Eclipse использует библиотеку ICU, которая имеет почти точно такой же синтаксис и семантику, что и Java-вкус (преднамеренный выбор дизайна). О, и есть еще одна проблема с '(. | \ N)'. Есть несколько других разделителей строк, которые '.' не совпадают, поэтому технически вы должны были использовать. '(|. [\ Г \ п \ u0085 \ u2028 \ u2029])'. Если вы идете по этому маршруту. Который не должен. –