gpt4 book ai didi

正则表达式在找到文本并且缺少其他文本时进行搜索

转载 作者:行者123 更新时间:2023-12-01 04:55:13 25 4
gpt4 key购买 nike

我有以下文字:

application ONE {
protocol tcp;
destination-port 50;
}
application TWO {
protocol udp;
destination-port 51;
inactivity-timeout 800;
}
application THREE {
protocol udp;
destination-port 500;
}

我需要搜索每个 application , 当 protocoludp , 如果 inactivity-timeout不同于 1800(应用程序二)或 protocoludp并且没有定义不活动(应用程序三)。
我用正则表达式解决了第一种情况:
(?s)(?=protocol udp).*(inactivity-timeout (?!1800))

但我还没有找到获得第二个的方法。

有什么建议么?

最佳答案

你用 Java 标记了这个,所以我给你一个 Java 解决方案,虽然我不确定你的帖子是否是你想要的。

就个人而言,我会将问题分为两部分。首先,提取应用程序,其次,检查应用程序是否符合要求。这是我的尝试。

public class ApplicationReadOut {

public static String EXAMLPLE = "application ONE {\r\n"
+" protocol tcp;\r\n"
+" destination-port 50;\r\n"
+"}\r\n"
+"application TWO {\r\n"
+" protocol udp;\r\n"
+" destination-port 51;\r\n"
+" inactivity-timeout 800;\r\n"
+"}\r\n"
+"application THREE {\r\n"
+" protocol udp;\r\n"
+" destination-port 500;\r\n"
+"}\r\n";

public boolean checkApplication(String app) {
String[] lines = app.split("\r\n");
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 \r\n 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)));
}

}

我希望这很有用,您可以修改它以满足您的需要:-)

关于正则表达式在找到文本并且缺少其他文本时进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37810678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com