2009-06-07 5 views
11

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

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

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

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

Header text 

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

спасибо!

ответ

24

Написать регулярное выражение вроде этого:

"(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 
+0

@Adam ... это только потому, что мне нужно было запустить Eclipse, чтобы получить пример и очень быстро получить ответ;) –

+0

@Aaron: достаточно справедливо. Я также могу удалить свой первый комментарий, тогда :) Хороший ответ. – bernie

+0

@ Аарон - спасибо, ваш пример работает! Но, пожалуйста, не могли бы вы рассказать мне, какой шаблон регулярного выражения использовать для извлечения одного и того же текста из такой строки, которая включает в себя некоторые одинарные кавычки? <имя столбца = 'название'> Заголовок \ п \ п \ NTEXT Я попытался с помощью Узор р = Pattern.compile ( "<имя столбца = 'название'> (. *) ", Образец.DOTALL ); и то же самое, но с обратной косой чертой перед кавычками, но ни одна из них не работает. Извините, я очень новичок в регулярных выражениях, ценю помощь. Еще раз спасибо! Anna –

2

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

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

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

+1

+1 Когда у вас есть дерево DOM, вы можете использовать XPath, чтобы вытащить нужные вам биты. –

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

  • Нет связанных вопросов^_^