简体   繁体   中英

how to filter out some substrings with regex effectively?

i want to filter out srcport and dstport from the input string. here is the code i tried:

String input = "2014<>10.100.2.3<><189>date=2014-01-16,time=11:26:14,devname=B3909601569,devid=B3909601569,logid=000013,type=traffic,srcip=192.168.192.123,srcport=2072,srcintf=port2,dstip=10.180.1.105,dstport=3206,dstintf=port1,sessionid=121543,status=close,policyid=196,service=MYSQL,proto=6,duration=10,sentbyte=3910,rcvdbyte=175085,sentpkt=74,rcvdpkt=132";

Pattern p = Pattern.compile("(srcport=)(\\d+).[\\s]?(dstport=)(\\d+)");
Matcher m = p.matcher(input);

StringBuffer result=new StringBuffer();

while (m.find()) {

System.out.println("Srcport: " + m.group(2) + " & ");
System.out.println("Dstport: " + m.group(4));

}

System.out.println(result);

but its not showing any output. Is there a mistake in the regex

Pattern p = Pattern.compile("(srcport=)(\\d+).[\\s]?(dstport=)(\\d+)");

or the println lines

System.out.println("Srcport: " + m.group(2) + " & ");
System.out.println("Dstport: " + m.group(4));"

any suggestions will be highly appreciated.

See following changes to both the regex and the captured groups:

    String input = "2014<>10.100.2.3<><189>date=2014-01-16,time=11:26:14,devname=B3909601569,devid=B3909601569,logid=000013,type=traffic,srcip=192.168.192.123,srcport=2072,srcintf=port2,dstip=10.180.1.105,dstport=3206,dstintf=port1,sessionid=121543,status=close,policyid=196,service=MYSQL,proto=6,duration=10,sentbyte=3910,rcvdbyte=175085,sentpkt=74,rcvdpkt=132";
    Pattern p = Pattern.compile("srcport=(\\d+).*?dstport=(\\d+)"); // update regex
    Matcher m = p.matcher(input);

    StringBuffer result=new StringBuffer();

    while (m.find()) {

        System.out.println("Srcport: " + m.group(1)); //print groups 1 + 2
        System.out.println("Dstport: " + m.group(2));

    }

    System.out.println(result);

You forgot to use or( | ) in your regex

srcport=(\\d+)|dstport=(\\d+)

Your code would be

while (m.find()) 
{
    if(m.group().startsWith("srcport"))
        System.out.println("Srcport: " + m.group(1) + " & ");
    else
        System.out.println("Dstport: " + m.group(1));

}

尝试这个 :

Pattern p = Pattern.compile("srcport=(\\d+)|dstport=(\\d+)");

Try the below code. I have run this in my system and it it working fine.

String input = "2014<>10.100.2.3<><189>date=2014-01-16,time=11:26:14,devname=B3909601569,devid=B3909601569,logid=000013,type=traffic,srcip=192.168.192.123,srcport=2072,srcintf=port2,dstip=10.180.1.105,dstport=3206,dstintf=port1,sessionid=121543,status=close,policyid=196,service=MYSQL,proto=6,duration=10,sentbyte=3910,rcvdbyte=175085,sentpkt=74,rcvdpkt=132";

    Pattern p = Pattern.compile("(srcport=)(\\d+)((.*)?)(dstport=)(\\d+)(\\.)*");
    Matcher m = p.matcher(input);

    StringBuffer result=new StringBuffer();

    while (m.find()) {
        System.out.println(m.group());
        System.out.println("Srcport: " + m.group(2) );
        System.out.println("Dstport: " + m.group(6));

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM