Regex 在正则表达式中分组以捕获时间戳和主机名

Regex 在正则表达式中分组以捕获时间戳和主机名,regex,capturing-group,Regex,Capturing Group,我有以下日志,需要使用regex(pcre)提取时间、主机名 2017-05-05T13:03:10.004595+00:00节适用于VMware ESX,abc.hostname.co.uk Vpxa:[fcec63d0]信息“commonvpxLro”opID=host@127454-101-20][VpxLRO]--完成任务-内部-3548957----vmod1.query.PropertyCollector.Filter.destroy-- 2017-05-05T13:04:10.75

我有以下日志,需要使用regex(pcre)提取时间、主机名

2017-05-05T13:03:10.004595+00:00节适用于VMware ESX,abc.hostname.co.uk Vpxa:[fcec63d0]信息“commonvpxLro”opID=host@127454-101-20][VpxLRO]--完成任务-内部-3548957----vmod1.query.PropertyCollector.Filter.destroy--

2017-05-05T13:04:10.7568945+00:00 abc.hostname.co.uk,Vpxa:[fcec63d0]信息“commonvpxLro”opID=host@89459-13-20][VpxLRO]--完成任务-内部-3548957----vmod1.query.PropertyCollector.Filter.destroy--

2017-05-05T13:05:10.785895+00:00节适用于VMware ESX,abc.hostname.co.uk Vpxa:[fcec63d0]信息“commonvpxLro”opID=host@12748-101-20][VpxLRO]--完成任务-内部-3548957----vmod1.query.PropertyCollector.Filter.destroy--

2017-05-05T13:13:11.986532+00:00节适用于VMware ESX,abc.hostname.co.uk Vpxa:[fcec63d0]信息“commonvpxLro”opID=host@12748-101-20][VpxLRO]--完成任务-内部-3548957----vmod1.query.PropertyCollector.Filter.destroy--

例如:时间戳=2017-05-05T13:13:11.986532+00:00
hostname=abc.hostname.co.uk,我需要使用单个正则表达式从上述4个日志中提取它。这里棘手的部分是添加时间戳“VMware ESX部分”后的每个备用日志。有人告诉我,我可以将它分组,比如说时间戳作为一个捕获组,下一个组是主机名。我可以编写一个用于捕获时间戳的正则表达式,但如何为主机名创建一个捕获组?

以下内容适用于您,例如,它在组1中捕获时间,在组2中捕获主机名:

(\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{1,7}\+\d\d:\d\d)[^\.]*(\s[\w]*\.[\w]*[\.[\w]*]*)
这意味着什么:

\d\d\d\d-\d\d-\d\dT\d\d:\d\d
捕获类似于
0000-00-00T00:00

\d{1,7}+\d\d:\d\d
捕获类似于
.0x1-7+00:00
的内容,其中0x1-7表示必须有1到7个数字

[^.]*
表示“由非
字符的任意组合组成的字符串”。注意,我在这里假设日期之后出现的第一个点字符在主机地址中。如果你不知道它是否是第一个点,这个正则表达式会变得更复杂

(\s[\w]*\.[\w]*.[\.\w]*]*)
表示空格(或制表符或回车),然后是类似于
的text.text.text.text
,其中
.text
至少出现两次(前两次
[\w]*
,但可能需要多少部分


在此处尝试:

分享您的尝试非常感谢。它很有效。我所做的唯一更改是多次将其改为\d,而不是\d+-\d+等。再次感谢您的及时回复。