string input= "devname=B399601569,devid=B39601569,logid=000013,type=traffic,srcip=192.168.192.123,srcport=2072,dstip=10.180.1.105,dstport=3206"
这是我试过的表达式:
Pattern p = Pattern.compile("(srcip=)(\\d+)((.*)?)(dstip=)(\\d+)(\\.)*");
仅打印:srcip = 192 dstip = 10
但我正在寻找srcip = 192.168.192.123 dstip = 10.180.1.105 任何建议??
答案 0 :(得分:0)
你的分组括号错了;你想要
(\\d+\\.)+\\d+
不
(\\d+)(\\.)*
后者允许任意数量的句号(零或更多,贪婪)但在最后一段时间后不允许更多句号。
更详细一点,
(srcip=(?:(?:\\d+\\.)+\\d+)(?:.*)?(dstip=(?:\\d+\\.)+\\d+)
将srcip=
及其IP地址捕获到第一组,dstip=
及其IP地址捕获到第二组。 (?:...)
构造允许使用不创建新匹配组的括号。
当然,如果需要,您可以添加分组括号以仅提取IP地址。组从左侧开始计数,每个左括号不是(?:
创建另一个组。