我有一个大字符串,其中包含两个常量标记字符串之间的多行子序列,我可以用正则表达式识别。
为了简化,我在这里将它们命名为abcdef
和fedcba
:
abcdef Sed lobortis nisl sed malesuada bibendum. fedcba
...
abcdef Fusce odio turpis, accumsan non posuere placerat.
1
2
3
fedcba
abcdef Aliquam erat volutpat. Proin ultrices fedcba
如何从大字符串中获取所有包括标记的事件?
答案 0 :(得分:6)
像
这样的东西"-vs-binding": { "BeforeBuild": [ "build" ] }
其中Pattern r = Pattern.compile("abcdef[\\s\\S]*?fedcba");
Matcher m = r.matcher(sInput);
if (m.find( )) {
System.out.println("Found value: " + m.group() );
}
是您要搜索的字符串。
sInput
将匹配任意数字的任何字符,直至以下[\s\S]*?
。感谢fedcba
非贪婪的匹配,这意味着它不会持续到最后?
(如果它是贪婪的话),因此会让你分开字符串。
答案 1 :(得分:0)
<强> REGEXP:强>
(?:\babcdef)(?:.*\n)*(?:\bfedcba)
<强> JAVA:强>
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "(?:\\babcdef)(?:.*\\n)*(?:\\bfedcba)";
final String string = "patata\n"
+ "abcdef\n"
+ "Aliquam erat volutpat. Proin ultrices\n"
+ "Testing\n\n"
+ "test[](test)\n"
+ "Testing\n"
+ "fedcba\n"
+ "Testing\n\n\n\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
原文:
patata
abcdef
Aliquam erat volutpat. Proin ultrices
Testing
test[](test)
Testing
fedcba
Testing
<强>结果:强>
abcdef
Aliquam erat volutpat. Proin ultrices
Testing
test[](test)
Testing
fedcba
请参阅: https://regex101.com/r/xXaLgN/5
享受。
不要忘记,如果我帮助你,请将我标记为问题的答案。