Как с помощью регулярок взять блоки?

Есть вывод консоли

Security Associations (2 up, 0 connecting):
 IPSec-IKEv2[2]: ESTABLISHED 10 seconds ago, 5.79.70.34[a.teletom.ru]...91.77.160.189[192.168.1.64]
 IPSec-IKEv2[2]: Remote EAP identity: mac
 IPSec-IKEv2[2]: IKEv2 SPIs: 8e03bee2f90a7b0f_i 2b840459b2a53517_r*, rekeying disabled
 IPSec-IKEv2[2]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
 IPSec-IKEv2{2}:  INSTALLED, TUNNEL, reqid 2, ESP in UDP SPIs: ca7323ca_i 0dd681eb_o
 IPSec-IKEv2{2}:  AES_CBC_128/HMAC_SHA1_96, 63234 bytes_i (390 pkts, 0s ago), 113714 bytes_o (345 pkts, 0s ago), rekeying disabled
 IPSec-IKEv2{2}:   0.0.0.0/0 === 10.101.0.2/32
 IPSec-IKEv2[1]: ESTABLISHED 8 minutes ago, 5.79.70.34[a.teletom.ru]...91.77.160.189[hon]
 IPSec-IKEv2[1]: IKEv2 SPIs: 0fa1c950bdb21ac0_i 0bcd0f3b2bea4cea_r*, rekeying disabled
 IPSec-IKEv2[1]: IKE proposal: AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256
 IPSec-IKEv2{1}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cb680131_i 69774a81_o
 IPSec-IKEv2{1}:  AES_GCM_16_128, 86593 bytes_i (454 pkts, 11s ago), 249805 bytes_o (510 pkts, 11s ago), rekeying disabled
 IPSec-IKEv2{1}:   0.0.0.0/0 === 10.101.0.1/32

Я хочу вытащить блоки ESTABLISHED. У меня в логах их две штуки, но моя регулярка парсит одну

(?<=ESTABLISHED)[\W\w]*?ESTABLISHED

Как сделать чтобы выделил оба блока?


Ответы (1 шт):

Автор решения: UModeL

Регулярное выражение будет таким:

/^(.+ESTABLISHED[\s\S]+?={3}.+?)$/gim

Рабочий пример на JS:

let sTxt = `Security Associations (2 up, 0 connecting):
 IPSec-IKEv2[2]: ESTABLISHED 10 seconds ago, 5.79.70.34[a.teletom.ru]...91.77.160.189[192.168.1.64]
 IPSec-IKEv2[2]: Remote EAP identity: mac
 IPSec-IKEv2[2]: IKEv2 SPIs: 8e03bee2f90a7b0f_i 2b840459b2a53517_r*, rekeying disabled
 IPSec-IKEv2[2]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
 IPSec-IKEv2{2}:  INSTALLED, TUNNEL, reqid 2, ESP in UDP SPIs: ca7323ca_i 0dd681eb_o
 IPSec-IKEv2{2}:  AES_CBC_128/HMAC_SHA1_96, 63234 bytes_i (390 pkts, 0s ago), 113714 bytes_o (345 pkts, 0s ago), rekeying disabled
 IPSec-IKEv2{2}:   0.0.0.0/0 === 10.101.0.2/32
 IPSec-IKEv2[1]: ESTABLISHED 8 minutes ago, 5.79.70.34[a.teletom.ru]...91.77.160.189[hon]
 IPSec-IKEv2[1]: IKEv2 SPIs: 0fa1c950bdb21ac0_i 0bcd0f3b2bea4cea_r*, rekeying disabled
 IPSec-IKEv2[1]: IKE proposal: AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256
 IPSec-IKEv2{1}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cb680131_i 69774a81_o
 IPSec-IKEv2{1}:  AES_GCM_16_128, 86593 bytes_i (454 pkts, 11s ago), 249805 bytes_o (510 pkts, 11s ago), rekeying disabled
 IPSec-IKEv2{1}:   0.0.0.0/0 === 10.101.0.1/32`;

let rExp = /^(.+ESTABLISHED[\s\S]+?={3}.+?)$/gim;

console.log(sTxt.match(rExp));

Для С# и Python выражение не меняется (за исключением работы с флагами).

→ Ссылка