Java 多次查找两个字符串之间的所有字符串

Java 多次查找两个字符串之间的所有字符串,java,regex,string,matcher,Java,Regex,String,Matcher,我知道这可能是一个重复,但我没有找到一个答案,满足这个问题。我有一个大字符串,设置如下: 季节 内容 季节 内容 季节 内容内容 等等 我想获取“季节”字符串之间的所有内容,并将这些内容放入列表中。这是我迄今为止的代码,但它不工作,它不匹配任何东西 String pattern = "season"; Pattern pattern2 = Pattern.compile(pattern+"(.*?)"+pattern); Matcher m = pattern2.matcher(

我知道这可能是一个重复,但我没有找到一个答案,满足这个问题。我有一个大字符串,设置如下:

季节
内容
季节
内容
季节
内容内容

等等

我想获取“季节”字符串之间的所有内容,并将这些内容放入列表中。这是我迄今为止的代码,但它不工作,它不匹配任何东西

String pattern = "season";
    Pattern pattern2 = Pattern.compile(pattern+"(.*?)"+pattern);
    Matcher m = pattern2.matcher(str);
    while(m.find()) {
        System.out.println(m.group());
当我使用StringUtils.substringBetween()时,它确实起作用,但我需要将每个字符串都放在两个“季节”字符串之间。

最好的办法是使用a来断言
季节或字符串的结尾。如果换行符序列位于要使用dotall标志的图案之间,则也可以使用dotall标志使点
也与换行符匹配

String s  = "season\nfoobar foobaz\n\nseason\nbarbaz\nseason\nbazquz";
Pattern p = Pattern.compile("(?s)season\\s*(.*?)(?=\\s*season|$)");
Matcher m = p.matcher(s);
List<String> arrayList = new ArrayList<String>();
while (m.find()) {
    arrayList.add(m.group(1));
}
System.out.println(arrayList); // [foobar foobaz, barbaz, bazquz]
String s=“季节\nfoobar foobaz\n\nSason\nbarbaz\nSason\nbazquz”;
模式p=Pattern.compile(“(?s)季节\\s*(.*?(=\\s*季节|$)”;
匹配器m=匹配器p;
List arrayList=新建arrayList();
while(m.find()){
arrayList.add(m.group(1));
}
System.out.println(arrayList);//[foobar foobaz,barbaz,Bazzuz]

这也应该有效-

import java.util.ArrayList;
import java.util.List;

public class Season {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String largeString = "season content content content content content season content content content content content season content content content content content";
        List<ArrayList<String>> lists = getStringBetweenSeason(largeString);
        for (ArrayList<String> list : lists) {
            for (String str : list)
                System.out.println(list);
        }

    }

    public static List<ArrayList<String>> getStringBetweenSeason(
            String largeString) {
        if (largeString == null)
            return null;
        List<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
        for (String str : largeString.split("season")) {
            if (!str.trim().isEmpty()) {
                ArrayList<String> list = new ArrayList<String>();
                for (String strContent : str.split(" ")) {
                    list.add(strContent);
                }
                lists.add(list);
            }
        }
        return lists;
    }
}
import java.util.ArrayList;
导入java.util.List;
公共课季{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
String largeString=“季节内容季节内容”;
List lists=GetStringBetweenSeson(最大值);
对于(ArrayList:列表){
for(字符串str:list)
系统输出打印项次(列表);
}
}
公共静态列表GetStringBetweenSeson(
字符串(最大值){
if(最大值==null)
返回null;
List lists=新建ArrayList();
对于(字符串str:largeString.split(“季节”)){
如果(!str.trim().isEmpty()){
ArrayList=新建ArrayList();
for(字符串strContent:str.split(“”){
列表.添加(strContent);
}
列表。添加(列表);
}
}
退货清单;
}
}
-----如果目标是模式匹配,那么这似乎也很有效

public static ArrayList<String> getStringBetweenSeason(String largeString) {
        if (largeString == null)
            return null;
        ArrayList<String> lists = new ArrayList<String>();
        Pattern p = Pattern.compile("season" + "*.*" + "season");
        Matcher m = p.matcher(largeString);

        while (m.find()) {
            lists.add(m.group());
        }

        return lists;
    }
publicstaticarraylistgetstringbetweenseson(字符串最大化){
if(最大值==null)
返回null;
ArrayList list=新的ArrayList();
模式p=Pattern.compile(“季节”+“***”+“季节”);
匹配器m=p.匹配器(最大);
while(m.find()){
list.add(m.group());
}
退货清单;
}

这些是新行吗?
seasure**seasure
匹配
sea所以一些文本注意到不完整的第一个单词seasure
。。。