用于在嵌套文本之间提取一些参数值的正则表达式

Regex to extract some parameters values between nested text

我有以下输入文本,我想用正则表达式提取以下值(我首先寻找适用于 VBA Excel 的正则表达式,但我认为没有如果正则表达式用于 PCRE,则差异太大):

1- num之后的数字 --> 3025285000

2- IP 地址 --> 111.111.112.22313.100.1.11

3- 上行链路和下行链路值 --> 1391616269538

4- xTime之后的日期和时间 --> 2019-07-22 18:09:55 -03:00

输入文字是这样的:

{ num:{3025285000} }
{ ipadd:{iPadd:{iPv4add:{111.111.112.223} } } }
{ ipval:{iPadd:{13.100.1.11} } }
{ :{abc:{-} ddf:{-} mainVALUplink:{139161} mainVALDownlink:{6269538} kppacRR:{bbckdo} xTime:{2019-07-22 18:09:55 -03:00 } ppwo:{-} wwe:{-} iiurur:{qCI:{8} wie:{-} iiwww:{-} oop:{-} } } }

我正在尝试使用以下正则表达式(您可以在此处查看 https://regex101.com/r/J9kGMy/1

\B\d+\b|\B{\d+\..+\b}|dataVolumeGPRS(Up|Down)link:\B\d+|xTime:{\B\d+

但匹配不完整或字符较多,因为当前匹配为:

匹配 1:完全匹配 8-17 025285000 应该是 3025285000

匹配 2:完整匹配 45-62 {111.111.112.223} 应该是 111.111.112.223

比赛 3:完整比赛 84-97 {13.100.1.11} 应该是 13.100.1.11

匹配4:完整匹配138-143 39161 应该是139161

匹配 5:完全匹配 163-169 269538 应该是 6269538

匹配 6:完整匹配 196-199 019 应该是 2019-07-22 18:09:55 -03:00

第7场:全场比赛201-202 7
第8场:全场204-205 2
第9场:全场207-208 8
第10场:全场210-211 9
第11场:全场213-214 5
第12场:全场217-218 3
第 13 场:全场比赛 220-221 0
第 14 场:完整比赛 305-307 04

由于每个预期结果都占一行,因此合乎逻辑的解决方案是逐行拆分输入,然后对它们应用更简单的单个正则表达式以捕获所需内容。

然而,以下正则表达式虽然冗长,但仍能按预期工作:

num:\s*{\s*(\d+)\s*}[\s\S]+?(?:ip\S+:{\s*([\d\.]+)\s*}[\s\S]+?)[\s\S]+?(?:ip\S+:{\s*([\d\.]+)\s*}[\s\S]+?)[\s\S]+?Uplink:\s*{\s*(\d+)\s*}[\s\S]+?Downlink:\s*{\s*(\d+)}\s*[\s\S]+xTime:{\s*([\s\d-:]*?)\s*}

每个捕获组都包含所需的数据。

Demo

在您尝试的模式中,您使用的是 alternation 使用 |

如果您想以这种方式匹配您的值,您可以通过匹配 numipAddiPv4addxTime 使匹配更具体,然后使用捕获组捕获 {}.

之间的内容

在捕获组 (\d+) 中,您可以使用或使用 negated character class ([^{}]+) 匹配 1+ 个数字,并匹配除 { 和 [=17 之外的所有字符=]

结果将有 4 个捕获组。

num:{(\d+)}|iPadd:{([^{}]+)}|iPv4add:{([^{}]+)}|xTime:{([^{}]+)}

Regex demo