Найти заменить именованные группы regexp в geany

Я пытаюсь заменить открытые методы защищенными методами для методов, которые имеют комментарий.

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

вот объявление метода:

public function extractFile($fileName){ //TODO: change to protected

это регулярное выражение:

(?<ws>^s+)(?<pb>public)(?<fn>[^/n]+)(?<cm>//TODO: change to protected)

Если я заменю его на:

protected//TODO: change back to public for testing

похоже, что работает, но то,что я не могу заставить работать, - это назвать замену. Я должен использовать 1, чтобы получить первую группу. Зачем называть группы, если вы не можете получить к ним доступ в заменяющих текстах? Пробовал такие вещи, как, $ws, $ws, но это не работает.

мой вопрос: Что такое заменяющий текст, если я хочу заменить 1 на именованную группу?

1 ответов


на ?<ws> синтаксис именованной группы такой же, как и у .NET/Perl. Для этих механизмов регулярных выражений ссылка на строку замены для именованной группы -${ws}. Это означает, что ваша строка замены будет:

${ws}protected${fn}\//TODO: change back to public for testing

на \k<ws> ссылки, упомянутые м.Бюттнер используется только для обратных ссылок в фактическое выражение.

Дополнительная Информация:

кажется, что geany также позволяет использовать стиль Python с именем группы:

  • ?P<ws> синтаксис захвата
  • \g<ws> синтаксис строки замены
  • (?P=ws) является синтаксисом backreference regex

EDIT:

Похоже, моя надежда на решение не сработала. От руководство,

"подмаски может быть назван одним из трех способов: (?...) или (?"имя"...) как в Perl, или (?П...) как в Python. Ссылки на захват скобки от другие части шаблона, такие как backreferences, рекурсия и условия, могут быть сделаны имя а также по количеству."

и дальше:

" обратные ссылки на named subpatterns используйте синтаксис Perl \k или \K 'name' или синтаксис Python (?Р=имя)."

и

" A subpattern, на который ссылается имя может появиться в шаблон до или после ссылки."

Итак, мой вывод синтаксиса для использования именованных групп был правильным. К сожалению, их можно использовать только в соответствующем шаблоне. Это отвечает на ваш вопрос " Почему группы имен...?".

насколько это глупо? Если вы прилагаете все усилия для реализации именованных групп и их использования в шаблоне соответствия, почему бы не реализовать использование в строке замены?