Regex: unir una cadena entre dos etiquetas en una cadena

Soy nuevo en Regexp. Me sorprende escribir expresiones regulares para el siguiente escenario. ¿Puede alguien ayudarme a resolver esto?

Si tengo una cadena como la siguiente:

<Tag1 attr="test"/>
<Tag2>
    <Tag4 attr="test"/>
    <Tag5 attr="test"/>
</Tag2>
<Tag3 attr="test"/>

¿Cuál es la expresión regular para que coincida con 'prueba' entre las etiquetas <Tag2> y </Tag2>?

La salida debe coincidir con 'prueba' en Tag4 y Tag5 ...

Cualquier ayuda sería muy apreciada..

Respuesta 1

XPath es realmente más apropiado para esto. Esto parece una publicación duplicada. Original

Perl tiene un par de buenos analizadores xpath en CPAN. Pero aquí hay una buena página sobre el análisis de expresiones regulares multilínea si absolutamente debe usarlo.

Respuesta: 2

Todo lo dicho antes es totalmente cierto, sin embargo, si todavía quieres practicar algunas expresiones regulares, aquí hay una alternativa: no es posible hacerlo en una partida ya que uno de los grupos internos siempre se descartará (mira esto) , por lo que tendrás que extraer El pasaje interior primero.

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

public class RegexTagParse {

static String html = "<Tag1 attr=\"test\"/><Tag2>    <Tag4 attr=\"test_one\"/>    <Tag5 attr=\"test_two\"/></Tag2><Tag3 attr=\"test\"/>";

public static void main(String[] args) {
    Matcher mat1 = Pattern.compile("Tag2>(.*)</Tag2").matcher(html);
    mat1.find();

    Matcher mat2 = Pattern.compile("<[^<>]*attr=\"([^\"]+)\"[^<>]>").matcher(mat1.group(1));
    while(mat2.find()){
        System.out.println(mat2.group(1));
    }
}

}

de todos modos, sería mucho mejor usar XPath :)

Respuesta: 3

Todavía soy nuevo en el lenguaje y las bibliotecas de Java ... a menudo uso este tipo de patrón en Python, y me pregunto cómo debería implementar este con Java. Necesito leer un archivo enorme línea por línea, con ...

He escrito un servidor UDP simple usando Netty. El servidor escucha en un puerto en una determinada interfaz. ChannelFactory factory = new NioDatagramChannelFactory (Ejecutores ...

Necesito poder editar un objeto Pageable, más específicamente uno de los Sorts. Tengo un miembro de DTO que tiene una dirección de correo electrónico de propiedad. Desconocido para el cliente, esta es la información que se recopila ...

Mi problema es que JScrollPane no muestra una JTable dentro de ella. Cuando inicializo una tabla sin JScrollPane, todo funciona perfectamente. ¿Cómo hacer que JScrollPane no oculte JTable? vacío privado ...