我正在尝试构建一个正则表达式来匹配' ='之后的几个项目。标志。这是我到目前为止所拥有的。
= (\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'的部分之外,它匹配所有内容。我在哪里错了?
答案 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