从大字符串中提取正则表达式开头和结尾的所有子字符串

时间:2017-01-11 14:57:46

标签: java regex

我有一个大字符串,其中包含两个常量标记字符串之间的多行子序列,我可以用正则表达式识别。

为了简化,我在这里将它们命名为abcdeffedcba

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

如何从大字符串中获取所有包括标记的事件?

2 个答案:

答案 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

享受。

不要忘记,如果我帮助你,请将我标记为问题的答案。