首页 > 解决方案 > 值不以字符开头的键值的正则表达式

问题描述

我正在使用正则表达式来匹配以下格式的键值对。我的问题是我想排除以字符 { 开头的值。我需要对正则表达式非常严格。

我的正则表达式:

^\s*(?<nodename>\w+)\s*(?<nodevalue>.*)$

例子:

callingLineId {

    pid xxx,

    msisdn "xxx"

},

callingLineIdGSM 'xxxx'H,

portNumber xxxx,

mser {xxx},

xser {},

ppPser {xxx-pp},

cmReferenceNr xxx,

它不能匹配以下行:

callingLineId { mser {xxx},

它只需要匹配以下行:

portNumber xxxx, msisdn "xxx"

我在 regex101 上的项目: https://regex101.com/r/lvzyUj/1]

标签: regexpcre

解决方案


这应该可以解决问题

^\s*(?<nodename>\w+)\s*(?<nodevalue>[^{}\s,]*),?\s*$

如果“值”可以有空格,您可以使用它来代替:

^\s*(?<nodename>\w+)\s*(?<nodevalue>[^{}\r\n,]*),?\s*$

推荐阅读