如果正则表达式捕获包含括号,则捕获括号的内容,否则捕获组

if regex capture contains bracket then capture the contents of bracket else capture the group

我有以下几行...

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 组中 - 如何修改正则表达式以捕获以下内容

并得到结果:

您可以使用非捕获组进行竞价 - 首先选择外括号,然后尝试查找选择中是否有内括号并捕获它们之间的内容,或者只捕获外括号之间的内容括号:

(?:\[(?:.*?\[(.*?)\].*?|(.*?))\])

您没有指定您使用的语言,但这将 return 你们两个组 - 如果是 Line 1,第一个捕获组将包含捕获的字符串,如果是Line 2 第二个捕获组将包含括号之间的内容。在这两种情况下,只会填充一个捕获组。