Неохотный квантификатор, действующий жадный

У меня есть этот код:

String result = text;

    String regex = "((\\(|\\[)(.+)(\\)|\\])){1}?";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(result);

    System.out.println("start");
    System.out.println(result);
    while (matcher.find()) {
        System.out.print("Start index: " + matcher.start());
        System.out.print(" End index: " + matcher.end() + " ");
        System.out.println(matcher.group());
    }
    System.out.println("finish");

И у меня есть строка, которую я хочу сопоставить:

Some text sentence or sentences [something 234] (some things)

И вывод я получаю при выполнении:

start
some text sentence or sentences [something 234] (some things)
Start index: 32 End index: 61 [something 234] (some things)
finish

Теперь я на самом деле хочу найти найденные случаи в скобках отдельно, поэтому найти: [что-то 234] в одном совпадении (некоторые вещи) в качестве второго совпадения

Может кто-нибудь, пожалуйста, помогите мне построить регулярное выражение соответственно? Я не уверен, как поставить неохотный квантификатор для всего регулярного выражения, поэтому я заключил все элементы в квадратные скобки в другие скобки. Но я не понимаю, почему этот неохотный квантификатор действует здесь жадно и что мне нужно сделать, чтобы это изменить?

1 ответ

Решение

{1} в регулярных выражениях является избыточным, поскольку любой элемент без указанного квантификатора должен быть найден один раз. Кроме того, отказываться от него не имеет смысла, поскольку он не описывает диапазон возможных повторений (например, {min,max} где добавление ? сказал бы, чтобы двигатель регулярных выражений сделал число повторений в этом диапазоне как можно ближе к min насколько это возможно). Вот {n} описывает точное количество повторений так min знак равно max знак равно n,

Теперь вы должны быть в состоянии решить вашу проблему, сделав .+ (содержание в скобках) неохотно. Для этого используйте .+?,

Так что попробуйте с:

String regex = "((\\(|\\[)(.+?)(\\)|\\]))";
Другие вопросы по тегам