如果正则表达式捕获包含括号,则捕获括号的内容,否则捕获组
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 组中 - 如何修改正则表达式以捕获以下内容
- IF Group#2 包含第二组括号 [ ]
- THEN 捕获括号中的内容
- ELSE 抓取群组内容
并得到结果:
- 第 1 行:第 2 组:PQ.ACCOUNTS.IN
- 第 2 行:第 2 组:default-workqueue-14
您可以使用非捕获组进行竞价 - 首先选择外括号,然后尝试查找选择中是否有内括号并捕获它们之间的内容,或者只捕获外括号之间的内容括号:
(?:\[(?:.*?\[(.*?)\].*?|(.*?))\])
您没有指定您使用的语言,但这将 return 你们两个组 - 如果是 Line 1
,第一个捕获组将包含捕获的字符串,如果是Line 2
第二个捕获组将包含括号之间的内容。在这两种情况下,只会填充一个捕获组。
我有以下几行...
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 组:default-workqueue-14
您可以使用非捕获组进行竞价 - 首先选择外括号,然后尝试查找选择中是否有内括号并捕获它们之间的内容,或者只捕获外括号之间的内容括号:
(?:\[(?:.*?\[(.*?)\].*?|(.*?))\])
您没有指定您使用的语言,但这将 return 你们两个组 - 如果是 Line 1
,第一个捕获组将包含捕获的字符串,如果是Line 2
第二个捕获组将包含括号之间的内容。在这两种情况下,只会填充一个捕获组。