У меня есть строка, которая может иметь два формата:
Первый формат:
route-policy testPolicy
if (destination in pfx_manju) then
set extcommunity rt (10429:103) additive
endif
end-policy
Второй формат:
route-policy testPolicy
if (destination in EXP1) then
set extcommunity rt (27699:352002, 2.2.2.2:98) additive
elseif (destination in pfx_manju) then
set extcommunity rt (27699:339600, 27679:339700, 1.1.1.1:6763, 65536:45633) additive
elseif (destination in EXP5) then
drop
endif
end-policy
Третий формат:
route-policy EXPORTRP1
if (destination in EXP1) or (destination in EXP2) then
set extcommunity rt (27699:352002, 2.2.2.2:98) additive
elseif (destination in pfx_manju) or (destination in EXP4) then
set extcommunity rt (27699:339600, 27679:339700, 1.1.1.1:6763, 65536:45633) additive
elseif (destination in EXP5) or (destination in EXP6) then
drop
endif
end-policy
Итак, здесь полный текст представлен в виде строки. Строка либо одно условие (если), либо несколько условий (условия elseIf).
Из приведенной выше строки я хочу извлечь значения rt для одной жестко закодированной политики (pfx_manju). Я могу извлечь значения rt с помощью регулярного выражения ниже:
final String regex = "rt \\(([^)]+)\\)";
Теперь проблема в том, что я хочу извлечь подстроку, которая принадлежит жестко закодированной политике (pfx_manju).
Итак условие - получить подстроку с начальной позицией - это индекс pfx_manju , а конечной позицией - последующая endif или elseif .
Итак, я хочу вывод подстроки для приведенных выше примеров, как указано ниже,
Первая подстрока:
pfx_manju) then
set extcommunity rt (10429:103) additive
Вторая подстрока:
pfx_manju) then
set extcommunity rt (27699:339600, 27679:339700, 1.1.1.1:6763, 65536:45633) additive
Третья подстрока:
pfx_manju) or (destination in EXP4) then
set extcommunity rt (27699:339600, 27679:339700, 1.1.1.1:6763, 65536:45633) additive
Все предложения по решению optimisti c будут оценены