我试图使用regex获取链接列表(https://raw.githubusercontent.com/Anything-Minecraft-Team/anything-minecraft/main/server/info/lists/plugins/anticheats.md)的每个部分。
我希望能像这样从列表中得到每一节
- [Anti Cheat](https://github.com/Paroxial/Anti-Cheat)
Version: 1.8
Rating: ???
Discontinued这样我就可以得到版本/评级信息,并知道它来自哪个链接。
我有一个(?:.*)(?:\n .*)*,它选择在上面/下面的文本之间有空格的文本(编辑,不,它不是真的哑)。但由于我的格式不起作用,是否有其他方法可以做到这一点,还是必须更改格式?
发布于 2021-07-13 10:13:34
您可以使用3个捕获组获取链接和部分。
^- \[[^]\[]+]\((https?://[^\s()]+)\).*\R(Version:.*)\R(Rating:.*)\R(\S.+)$^-匹配字符串开头的-\[[^]\[]+]的[...]匹配\((https?://[^\s()]+)\)匹配(并捕获第1组中的url和匹配).*\R匹配行的其余部分和换行符(Version:.*)捕获组2,匹配版本信息\R(Rating:.*)捕获组3,匹配评级信息\R(\S.+)$匹配换行符并捕获组4中的单个空格char和行的其余部分final String regex = "^- \\[[^]\\[]+]\\((https?://[^\\s()]+)\\).*\\R(Version:.*)\\R(Rating:.*)\\R(\\S.+)$";
final String string = "- [ABC Advanced Anticheat](https://www.spigotmc.org/resources/91606/) - Removed due to private reasons \n"
+ "Version: 1.7 - 1.16 \n"
+ "Rating: 4 \n"
+ "Discontinued\n"
+ "- [AbdeslamNeverCheat](https://www.spigotmc.org/resources/61280) \n"
+ "Version: 1.8 \n"
+ "Rating: 1 \n"
+ "Discontinued";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Link: " + matcher.group(1));
System.out.println("Version: " + matcher.group(2));
System.out.println("Rating: " + matcher.group(3));
System.out.println("Status: " + matcher.group(4));
}输出
Link: https://www.spigotmc.org/resources/91606/
Version: Version: 1.7 - 1.16
Rating: Rating: 4
Status: Discontinued
Link: https://www.spigotmc.org/resources/61280
Version: Version: 1.8
Rating: Rating: 1
Status: Discontinuedhttps://stackoverflow.com/questions/68360042
复制相似问题