如何编写用于将字符串与'。'匹配的正则表达式(完全停止)介于两者之间并以逗号结尾?

时间:2014-03-07 10:00:34

标签: java regex

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 任何建议??

1 个答案:

答案 0 :(得分:0)

你的分组括号错了;你想要

(\\d+\\.)+\\d+

(\\d+)(\\.)*

后者允许任意数量的句号(零或更多,贪婪)但在最后一段时间后不允许更多句号。

更详细一点,

(srcip=(?:(?:\\d+\\.)+\\d+)(?:.*)?(dstip=(?:\\d+\\.)+\\d+)

srcip=及其IP地址捕获到第一组,dstip=及其IP地址捕获到第二组。 (?:...)构造允许使用不创建新匹配组的括号。

当然,如果需要,您可以添加分组括号以仅提取IP地址。组从左侧开始计数,每个左括号不是(?:创建另一个组。