2014-01-05 4 views
2

У меня есть следующий код:Regex на несколько строк

Matcher matcher = Pattern.compile("<tag 1>(.*?)</tag 1>").matcher(buffer); 
    int nr = 0; 
    while (matcher.find()) { 
     System.out.println("Match no. " + ++nr + ": '" + matcher.group() + "'"); 
    } 

Где буфер:

<tag 1> 

    My Value 

    </tag 1> 

Как включить многострочный матч для моего регулярного выражения, так что я могу соответствовать этому буферу? Благодаря!

+3

Не делайте этого. Используйте синтаксический анализатор HTML или XML. – SLaks

+1

Что касается парсеров go jsoup (http://jsoup.org/) отлично, особенно если вам нравятся css selectors – Leonti

ответ

2

Вы должны использовать DOTALL флаг для того, чтобы сделать DOT матч новой строки:

Matcher matcher = Pattern.compile("(?s)<tag 1>(.*?)</tag 1>").matcher(buffer); 

ИЛИ еще:

Matcher matcher = Pattern.compile("<tag 1>(.*?)</tag 1>", Pattern.DOTALL) 

Но позвольте мне предупредить, что разбор HTML/XML с помощью регулярных выражений не является самым большим идея.

+0

Или используйте 'Pattern.compile (" (. *?) ", Pattern.DOTALL)' – Njol

+0

@Njol: Спасибо, обновил его. – anubhava

Смежные вопросы