У мене є такі рядки ...
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
Я створив регулярний вираз
/(?:.*)(?:| )(?:.*)(?:| )(.*)(?:| )(?:.*)(:[.*[?.*]?])(?:s)(.{30})/g
У групі №2 - як я можу змінити регулярний вираз, щоб захопити наступне
- IF Group # 2 містить другий набір дужок []
- THEN Захоплення вмісту дужок
- ELSE Захоплення вмісту групи
І отримайте результат:
- Рядок 1: група №2: PQ.ACCOUNTS.IN
- Рядок 2: група №2: за промовчанням-14
Відповіді:
1 для відповіді № 1Ви можете скористатися групами, що не захоплюють, щоб зробити цепризначення ставок - спочатку вибираючи зовнішні дужки, а потім намагаючись знайти, чи є внутрішні дужки у виборі і захопити те, що "між ними, або просто захопити, що між зовнішніми дужками:
(?:[(?:.*?[(.*?)].*?|(.*?))])
Ви не вказали мову, яку ви використовуєте, але це поверне вам дві групи - у випадку Line 1
перша група захоплення буде містити захоплену рядок у випадку Line 2
друга група захоплення буде містити те, що "s" між дужками.