正则表达式搜索何时找到文本而其他文本丢失
发布时间:2020-12-14 05:47:27 所属栏目:百科 来源:网络整理
导读:我有以下文字: application ONE { protocol tcp; destination-port 50;}application TWO { protocol udp; destination-port 51; inactivity-timeout 800;}application THREE { protocol udp; destination-port 500;} 我需要搜索每个应用程序,当协议是udp时,
我有以下文字:
application ONE { protocol tcp; destination-port 50; } application TWO { protocol udp; destination-port 51; inactivity-timeout 800; } application THREE { protocol udp; destination-port 500; } 我需要搜索每个应用程序,当协议是udp时,如果不活动超时不同于1800(应用程序TWO)或协议是udp并且没有定义不活动(应用程序三). (?s)(?=protocol udp).*(inactivity-timeout (?!1800)) 但我还没有办法获得第二个. 有什么建议? 解决方法
你用Java标记了这一点,所以我给你一个Java解决方案,虽然我不确定你的帖子是否是你想要的.
我个人会将问题分成两部分.首先,提取应用程序,然后检查应用程序是否满足要求.这是我的尝试. public class ApplicationReadOut { public static String EXAMLPLE = "application ONE {rn" +" protocol tcp;rn" +" destination-port 50;rn" +"}rn" +"application TWO {rn" +" protocol udp;rn" +" destination-port 51;rn" +" inactivity-timeout 800;rn" +"}rn" +"application THREE {rn" +" protocol udp;rn" +" destination-port 500;rn" +"}rn"; public boolean checkApplication(String app) { String[] lines = app.split("rn"); boolean udp = false; boolean timeoutDiffers = true; boolean timeoutMentioned = false; for (String line : lines) { if (line.trim().equals("protocol udp;")) udp = true; if (line.trim().equals("inactivity-timeout 1800;")) timeoutDiffers = false; if (line.trim().startsWith("inactivity-timeout ")) timeoutMentioned = true; } return udp & (timeoutDiffers | !timeoutMentioned); } public String[] extractApplications(String text) { String[] applications = text.split("}(r*n*)*"); // the rn thing is to ignore blank lines in between applications ArrayList<String> goodApps = new ArrayList<String>(applications.length); for (int i = 0; i < applications.length; i++) { applications[i] += "}"; // this was removed by split if (checkApplication(applications[i])) goodApps.add(applications[i]); } return goodApps.toArray(new String[0]); } public static void main(String[] args) { ApplicationReadOut aro = new ApplicationReadOut(); System.out.println(Arrays.toString(aro.extractApplications(EXAMLPLE))); } } 我希望这很有用,你可以修改它以满足你的需求:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |