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