Как сделать группу NULL в регулярном выражении - PullRequest
0 голосов
/ 23 февраля 2020

Я хотел сделать регулярное выражение, где в одном журнале группа получает NULL

Regex

\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ)\s+(INFO|WARN|DEBUG|ERROR|FATAL|TRACE)\s+(.*?.*?\-\s+.*?)\s(\[?.*?\]?)\s+(.*)

Журналы

2019-11-14T04:25:00.123Z  WARN http-nio-127.0.0.1-7440-exec-127 CorfuCompileProxy - accessInner: Encountered a trim exception while accessing version 120383907 on attempt 0
2019-11-14T04:23:08.700Z  INFO RpcManagerRequestCleanupTimer RpcManager - SYSTEM [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Rpc response not received for application FabricStats request com.vmware.nsx.management.agg.messaging.AggService$ClientDataRequestMsg from client 8ac94189-d611-4eb3-9b93-c3c3a8e3d36a with correlation id 287e690e-0a47-4459-a0bb-be36fe439068 in 432000000 msec.
2019-11-14T04:24:04.072Z  INFO MessagingObjectFactoryImpl-4-2 ExporterLastAckServiceImpl - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Found exporter with elaId = Node#a3844284-e626-11e9-a87b-005056bcc0c6#AggSvc-L2-Bridging, returning lastAck = 16507 
2019-11-14T04:23:08.362Z  INFO ActivityEventRecovery-1 ActivityCacheManager - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Handling activity 92d6a146-fa12-4889-a0ff-441087e047d0 completion event for 1 
2019-11-14T04:23:08.362Z  DEBUG ActivityEventRecovery-1 ActivityCacheManager - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Handling activity 92d6a146-fa12-4889-a0ff-441087e047d0 completion event for 1

В вышеприведенных журналах я хочу группу 4 быть NULL, так как этот журнал не содержит квадратных скобок.

Я пробовал это в течение некоторого времени. Вот ссылка - https://regex101.com/r/LJnVrS/93

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 23 февраля 2020

Если должна присутствовать группа 4, а содержимое должно начинаться или заканчиваться квадратными скобками, вы можете сделать содержимое самой группы необязательным.

Чтобы сопоставить любой из них, начиная с квадратных скобок слева или заканчивая цифрой справа, вы можете использовать чередование :

((?:\S+\]|\[\S+)?)
  • ( Capture группа 4
    • (?: Группа без захвата
      • \S+\] Совпадение 1+ непробельные символы и окончание ]
      • | Или
      • \[\S+ Соответствие начальному [ и 1+ непробельные символы
    • )? Закрыть группу и сделать необязательным
  • )

Шаблон может выглядеть следующим образом:

(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z)\s+(INFO|WARN|DEBUG|ERROR|FATAL|TRACE)\s+((?:\S+\s+){4})((?:\S+\]|\[\S+)?)(.*)

Демонстрация регулярных выражений

Если все строки начинаются с начала строки, вы можете добавить шаблон к ^ и добавьте с помощью многострочного флага.

Обратите внимание, что вы должны экранировать точку, чтобы буквально соответствовать ей.

...