gpt4 book ai didi

java - 嵌套结构的正则表达式

转载 作者:行者123 更新时间:2023-12-01 17:55:54 28 4
gpt4 key购买 nike

给定输入为:

#start
random string 1
#end

#start
random string 2
#end

我可以将正则表达式编写为

(#start[\s\S]*?#end)

现在给定的数据让事情变得有点复杂:

  #start
random string 1
#start
random string 2
#end
#end

#start
random string 3
#end

我想要获得 03 场比赛,它们是:

#start
random string 1
#end

#start
random string 2
#end

#start
random string 3
#end

这可以通过正则表达式实现吗?因为我尝试了大部分正则表达式规则,但我认为我错过了一些东西,因为它不能按我想要的方式工作。

有人可以告诉我可以使用哪些规则来实现这个目标吗?

谢谢。

最佳答案

您无法在单个正则表达式中完成此操作。但是,您可以通过一次提取一组并将其从循环中的输入字符串中删除直到找不到更多匹配项来实现此目的。

因此 java 中的正则表达式可能如下所示

Pattern p = Pattern.compile("^.*(#start[^#]+#end).*$");

现在您可以从初始行中删除字符串部分并在循环中执行此操作。

这是一个执行此操作的小测试程序:

public static void main(String args[]) {
String re = "#start hello there #start my world #end #end #start bye dear #end ";
Pattern p = Pattern.compile("^(.*)(#start[^#]+#end)(.*)$");
Matcher m;
while ( (m = p.matcher(re)).matches()) {
System.out.println(m.group(2));
re = m.group(1) + m.group(3);
}
}

结果是:

#start bye dear #end
#start my world #end
#start hello there #end

关于java - 嵌套结构的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44788760/

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