需要使正则表达式匹配具有不同格式的项目

时间:2014-05-29 14:33:29

标签: regex

我正在尝试构建一个正则表达式来匹配' ='之后的几个项目。标志。这是我到目前为止所拥有的。

= (\S+)(?=SNMP)

结果只匹配以下14项中的12项。

Enterprise OID: SNMPv2-SMI::enterprises.1453.1.1 Trap Type: Enterprise Specific  Trap Sub-Type: .5  Community/Infosec Context: TRAP, SNMP v1, community public  Uptime: 64593430  Description: Enterprise Specific  PDU Attribute/Value Pair Array:SNMPv2-SMI::enterprises.1453.2.1.1.1.1.0 = "Company"|SNMPv2-SMI::enterprises.1453.2.1.1.1.2.0 = "200Sou"|SNMPv2-SMI::enterprises.1453.2.1.1.1.3.0 = 22|SNMPv2-SMI::enterprises.1453.2.1.1.1.4.0 = "ABC TEST ALARM"|SNMPv2-SMI::enterprises.1453.2.1.1.1.5.0 = 1|SNMPv2-SMI::enterprises.1453.2.1.1.1.6.0 = 2|SNMPv2-SMI::enterprises.1453.2.1.1.1.7.0 = 0|SNMPv2-SMI::enterprises.1453.2.1.1.1.8.0 = 0|SNMPv2-SMI::enterprises.1453.2.1.1.1.9.0 = 0|SNMPv2-SMI::enterprises.1453.2.1.1.1.10.0 = 0|SNMPv2-SMI::enterprises.1453.2.1.1.1.11.0 = 0|SNMPv2-SMI::enterprises.1453.2.1.1.1.12.0 = ""|SNMPv2-SMI::enterprises.1453.2.1.1.1.13.0 = "2014-05-27"|SNMPv2-SMI::enterprises.1453.2.1.1.1.14.0 = "23:12:25"

根据Regexr,除了带有尾随空格的部分以及未跟随' SNMP'的部分之外,它匹配所有内容。我在哪里错了?

1 个答案:

答案 0 :(得分:4)

问题是\S匹配任何非空格字符,并且您的某个值中有空格,因此失败匹配此处;抓住你的最后一场比赛,在你的预测中添加行结束$

= (.*?)(?=SNMP|$)

正则表达式:

=               '= '
(               group and capture to \1:
 .*?            any character except \n (0 or more times)
)               end of \1
(?=             look ahead to see if there is:
 SNMP           'SNMP'
 |              OR
 $              before an optional \n, and the end of the string
)               end of look-ahead

Live Demo