使用正则表达式在字符串中获取最短的组

时间:2015-10-07 07:12:21

标签: java regex

我有一个很长的字符串,我需要找到所有最短的组。目前正在发生的事情是我得到了两组,其中一组包含其间的所有数据(根据需要可能更具体)。我无法理解我应该在正则表达式模式中改变什么来处理我的情况。

字符串 - "aaa START1 value1 /END bbb START2 value2 /END TAG ccc START3 value3 /END TAG ddd"

预期 - START2 value2 /END TAG , START3 value3 /END TAG
实际 - START1 value1 /END bbb START2 value2 /END TAG , START3 value3 /END TAG

我的班级是 -

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Reg {
    public static void main(String[] args) {
        String response = "aaa START1 value1 /END bbb START2 value2 /END TAG ccc START3 value3 /END TAG ddd";

        StringBuilder sb1 = new StringBuilder();

        Pattern p = Pattern.compile("START[0-9]+(.*?)/END TAG");
        Matcher matcher1 = p.matcher(response);

        while (matcher1.find()) {

            sb1.append(matcher1.group()).append(" , ");
        }
        System.out.println(sb1);
    }
}

1 个答案:

答案 0 :(得分:1)

START[0-9]+(?:(?!\\bSTART).)*?/END TAG

您可以试试这个。请参阅演示。lookahead不允许您的群组之间有其他START

https://regex101.com/r/cJ6zQ3/21