Строка Java - получить все между (но не включая) два регулярных выражения? - PullRequest
11 голосов
/ 07 июня 2009

Есть ли в Java простой способ извлечь подстроку, указав разделители регулярного выражения с обеих сторон, не включая разделители в конечную подстроку?

Например, если у меня есть такая строка:

<row><column>Header text</column></row>

Какой самый простой способ извлечь подстроку:

Header text

Обратите внимание, что подстрока может содержать разрывы строк ...

спасибо!

Ответы [ 2 ]

24 голосов
/ 07 июня 2009

Напишите регулярное выражение, как это:

"(regex1)(.*)(regex2)"

... и вытащите среднюю группу из сопоставителя (для обработки новых строк в вашем шаблоне вы хотите использовать Pattern.DOTALL ).

Используя ваш пример, мы можем написать программу вроде:

package test;

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

public class Regex {

    public static void main(String[] args) {
        Pattern p = Pattern.compile(
                "<row><column>(.*)</column></row>",
                Pattern.DOTALL
            );

        Matcher matcher = p.matcher(
                "<row><column>Header\n\n\ntext</column></row>"
            );

        if(matcher.matches()){
            System.out.println(matcher.group(1));
        }
    }

}

Который при запуске распечатывает:

Header


text
2 голосов
/ 07 июня 2009

Вы не должны использовать регулярные выражения для декодирования XML - это в конечном итоге сломается, если ввод не строго контролируется.

Возможно, проще всего проанализировать XML в дереве DOM (Java 1.4 и новее содержат непосредственно синтаксический анализатор XML), а затем перемещаться по дереву, чтобы выбрать то, что вам нужно.

Возможно, вы хотели бы рассказать, чего хотите достичь с помощью вашей программы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...