¿Cómo este grupo () captura el texto?

Dev_noob:

Me he encontrado con este problema Hackerrank y la expresión regular debe coincidir con cuerda entre las etiquetas HTML. La expresión regular y la cadena es

String str="<h1>Hello World!</h1>";
String regex="<(.+)>([^<]+)</\\1>";

También lo que si el 'str' tiene más de un etiquetas HTML como String str="<h1><h1>Hello World!</h1></h1>"y cómo ([^<]+)las capturas de este 'str'.

Mi pregunta es ¿cómo ([^<]+)coincide con el 'str' y no ([a-zA-Z]+).

Aquí si el código fuente completo:

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

/* Solution assumes we can't have the symbol "<" as text between tags */
public class Solution{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int testCases = Integer.parseInt(scan.nextLine());

        while (testCases-- > 0) {
            String line = scan.nextLine();

            boolean matchFound = false;
            Pattern r = Pattern.compile(regex);
            Matcher m = r.matcher(line);

            while (m.find()) {
                System.out.println(m.group(2));
                matchFound = true;
            }
            if ( ! matchFound) {
                System.out.println("None");
            }
        }
    }
}

No importa si soy tonto para hacer esta pregunta y gracias por adelantado!

El físico loco:

Este expresiones regulares garantiza que la cadena sólo contiene una etiqueta, en el supuesto de entrada HTML bien formado.

Las primeras <(.+)>capturas el nombre de su etiqueta. El grupo de captura también recibirá atributos que pueda. Dado que +es un cuantificador codiciosos, capturará varias etiquetas si se puede.

Los arrastran </\\1>partidos contra lo capturó el primer grupo. Por eso, si su código HTML está bien formado, la expresión no capturar múltiples tags o etiquetas con atributos:

  • Etiqueta de apertura <h1>, el cierre de la etiqueta </h1>
  • Etiqueta de apertura <h1 attr="value">, de cierre del marcador </h1>, pero esperando</h1 attr="value">
  • Etiqueta de apertura <h1><h2>, de cierre del marcador </h2></h1>, pero esperando</h1><h2>

Es por eso que la etiqueta puede ser matche con .+bastante seguridad, mientras que los contenidos deben coincidir con [^<]+. Usted quiere asegurarse de que no agarra cualquier etiqueta de estancia en el contenido, pero se permite cualquier otro carácter. [^<]+(pronunciado. "No <, al menos una vez) permite cosas como !, aunque [A-za-z]sin duda no lo haría.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202851&siteId=1
Recomendado
Clasificación