2017-01-26 4 views
1

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

Чтобы нарисовать картину, моя картина выглядит примерно так (псевдо шаблон регулярных выражений)

(PAT),(PAT), ... ,(PAT) 

PAT Где некоторый длинный шаблон.

Требования

  1. не должны повторять рисунок, потому что его длина становится проблемой (в настоящее время, Notepad ++ позволяет только 2047 символов в окне поиска при использовании регулярных выражений, и я легко идти по этому пределу)
  2. Каждая группа захвата должна быть в состоянии соответствовать независимо от своих братьев и сестер. Например, сказать, что моя картина ([a-z]),([a-z]),([a-z]) тогда a,a,a и a,b,c должны соответствовать

Я посмотрел в именовании первой группы захвата затем ссылаться на него в последующих группах захватывающих, но этот метод нарушает второе требование (то есть, его не соответствует a,b,c). Существует ли прямой или косвенный способ выполнения обоих требований с использованием только регулярного выражения?

Моя конечная цель - получить и получить доступ к значению каждой группы захвата, чтобы я мог манипулировать каждой группой позже в «заменяющей» части поиска. & заменить поле.

ответ

4

Для повторного использования рисунка вы можете использовать (?n), где n - номер группы, которую нужно повторить. Например, фактическая картина:

(PAT),(PAT), ... ,(PAT) 

можно заменить:

(PAT),(?1), ... ,(?1) 

(?1) такая же картина, как (PAT)PAT все, что есть.

Вы можете иметь несколько шаблонов:

(PAT1),(PAT2),(PAT1),(PAT2),(PAT1),(PAT2),(PAT1),(PAT2) 

может быть уменьшена до:

(PAT1),(PAT2),(?1),(?2),(?1),(?2),(?1),(?2) 

или:

((PAT1),(PAT2)),(?1),(?1),(?1) 

или:

((PAT1),(PAT2)),(?1){3} 
+0

Отлично, спасибо! В качестве примечания я должен был заключить ссылки '(? N)' с одним дополнительным уровнем скобок, чтобы я мог получить к ним доступ позже в части замены. Образец заканчивался как «(PAT), ((? 1)), ..., ((? 1))' –

+0

@ Mr.Z: Радуйтесь, рад, что это помогает. – Toto

 Смежные вопросы

  • Нет связанных вопросов^_^