来自Wikipedia的任何页面:
...
abas asdn asf asfs af
{{Template1
|a = Name surname
|b = jhsdf sdf
|c = {{Template2}}
|d =
|e = [[f]] and [[g]]
|h = asd asdasfgasgasg asgas jygh trdx dftf xcth
|i = 73
|j = {{Template2|abc|123}}
|j = {{Template3|aa=kkk|bb={{Template4|cc=uu}}}}
}}
asd wetd gdsgwew g
{{OtherTemplate
|sdf = 213
}}
...
如何使用Java正则表达式找到Template1
的内容(起始|a
结尾为}}
)?
我试过了:
String pattern = "\\{\\{\\s*Template1\\s*(.*?)\\}\\}";
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
Matcher m = p.matcher(content);
while (m.find()) {
if (!m.group().equals("")) {
System.out.println(m.group());
System.out.println("-----------------------");
}
}
但是在这里正则表达式找到第一个}}
(Template2
}}
)然后停止。
我希望通过}}
任何{{
是开放的。然后我想找到顶级父母比赛。
我希望在Template1
和{{
之间获得最高}}
个内容?
修改
请注意,我在删除空格后正在解析content
。
content.replaceAll("\\s+","");
将内容想象成一行。
答案 0 :(得分:1)
/^{{Template1(.*?)^}}/sm
返回:
|a = Name surname
|b = jhsdf sdf
|c = {{Template2}}
|d =
|e = [[f]] and [[g]]
|h = asd asdasfgasgasg asgas jygh trdx dftf xcth
|i = 73
|j = {{Template2|abc|123}}
|j = {{Template3|aa=kkk|bb={{Template4|cc=uu}}}}
答案 1 :(得分:0)
答案 2 :(得分:0)
我认为解析器在这种情况下可以做得更好,但如果你想要正则表达式,那么这个怎么样:
{{Template1(?:[^{}]*?(?:{{[^}]+?}}))+(?:[}\n\s]+})*
我认为你的输入就像单行一样。