我正在尝试创建正则表达式,以解析SIP联系人信息。
目标是从字符串中获取3个组;用户名,ipaddress和另一个可选参数...
我的问题发生在找不到第3组时...正则表达式没有返回任何内容......不是前两组的事件......
问题是
有没有办法告诉系统一个组是可选的,可以在任何地方,如果该组不在那里返回一个特定值?
当前模式
.*<sip:(.*)@(.*):[1-9]\d*?.*(?=MyArg1=(true|false))
输入
在第一个“;”之后所有参数都用“;”分隔但“name = value”也只能是一个值。即; value1 = true; tag1; tag2; value2 = false
"Display" <sip:CD001@172.24.0.52:5060;MyArg1=true;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr>
"Display" <sip:CD001@172.24.0.52:5060;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr;MyArg1=true>
"Display" <sip:CD001@172.24.0.52:5060;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr;MyArg1=false>
"Display" <sip:CD001@172.24.0.52:5060;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr;allo=true;MyArg1=false>
"Display" <sip:CD001@172.24.0.52:5060;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr;MyArg1=false;MyArg2=true>
"Display" <sip:CD001@172.24.0.52:5060;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr;MyArg1=true;MyArg2=true>
"Display" <sip:CD001@172.24.0.52:5060;fs_path=sip%3A172.24.0.23%3Br2%3Don%3Blr>
与此同时,我非常确定该模式可以更有效......
感谢您的时间! 的Sebastien
答案 0 :(得分:0)
交替怎么样?我认为这是解决这个问题的合适方法。
(?|.*<sip:(.*)@(.*):[1-9]\d*?.*?(?=MyArg1=(true|false))|.*<sip:(.*)@(.*):[1-9]\d*?.*)
如果您不需要字符串的开头,请使用此略微优化的模式:
(?|<sip:(.*)@(.*):[1-9]\d*?.*(?=MyArg1=(true|false))|<sip:(.*)@(.*):[1-9]\d*?.*$)