Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/nginx/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用正则表达式有效地过滤掉一些子字符串?_Java_Regex - Fatal编程技术网

Java 如何使用正则表达式有效地过滤掉一些子字符串?

Java 如何使用正则表达式有效地过滤掉一些子字符串?,java,regex,Java,Regex,我想从输入字符串中过滤掉srcport和dstport。以下是我尝试的代码: 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.18

我想从输入字符串中过滤掉srcport和dstport。以下是我尝试的代码:

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);
或者是打印线

System.out.println("Srcport: " + m.group(2) + " & ");
System.out.println("Dstport: " + m.group(4));"
如有任何建议,将不胜感激

您忘记在正则表达式中使用or(
|

srcport=(\\d+)|dstport=(\\d+)
你的代码是

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+)");

请参阅对正则表达式和捕获组的以下更改:

    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);
字符串输入=“201410.100.2.3date=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,rcvd=175085,sentrct=132”;
模式p=Pattern.compile(“srcport=(\\d+).*?dstport=(\\d+);//更新正则表达式
匹配器m=p.Matcher(输入);
StringBuffer结果=新的StringBuffer();
while(m.find()){
System.out.println(“Srcport:+m.group(1));//打印组1+2
System.out.println(“dsport:+m.group(2));
}
系统输出打印项次(结果);

试试下面的代码。我已经在我的系统中运行了这个程序,它运行得很好

String input=“201410.100.2.3date=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,dstint=port1,sessionid=121543,status=close,policyid=196,service=MYSQL,proto=6,pkduration=10,sentbyte=3910,rcvdt=1750874,rcvdpkt=132”


对问题进行适当的格式设置,我将使用a(使用“,”和“=”)感谢您的建议感谢您的回复,但在以您的方式使用时,我得到的输出为:Srcport:2072&Dstport:2072 Srcport:null&Dstport:null@Neelutpol检查上面答案中的代码..你需要检查它是否以srcportone开始还有一个疑问。这可能很愚蠢,但我是新来的。如果有几行是作为输入。那么我应该做什么更改?
    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);
    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));

    }