Ho le seguenti linee ...
INFO | jvm 1 | 2017/04/11 23:59:52 | 2017-04-11 23:59:52:[ - JmsConsumer[PQ.ACCOUNTS.IN]] JMS01 - Accounts Queue ACCTS1 INFO Msg Detected
INFO | jvm 1 | 2017/04/11 23:59:52 | 2017-04-11 23:59:52:[ default-workqueue-14] sendSoapTarget INFO RESPONSE: <soap:Envelope
Ho creato una regex
/(?:.*)(?:| )(?:.*)(?:| )(.*)(?:| )(?:.*)(:[.*[?.*]?])(?:s)(.{30})/g
Nel gruppo n. 2, come posso modificare la regex per acquisire quanto segue
- IF Gruppo # 2 Contiene il secondo set di parentesi []
- ALLORA Cattura il contenuto delle parentesi
- ELSE Cattura i contenuti del gruppo
E ottieni il risultato:
- Linea 1: gruppo n. 2: PQ.ACCOUNTS.IN
- Linea 2: gruppo # 2: default-workqueue-14
risposte:
1 per risposta № 1Puoi usare gruppi non-catturanti per fare il tuobidding - selezionando prima le parentesi esterne e poi cercando di trovare se ci sono parentesi interne nella selezione e catturare cosa c'è tra di loro, o semplicemente catturare cosa c'è tra le parentesi esterne:
(?:[(?:.*?[(.*?)].*?|(.*?))])
Non hai specificato quale lingua usi, ma questo ti restituirà due gruppi - in caso di Line 1
il primo gruppo di cattura conterrà la stringa catturata, in caso di Line 2
il secondo gruppo di cattura conterrà quello che è tra le parentesi, in entrambi i casi verrà popolato solo un gruppo di cattura.