Comment ce groupe () attraper le texte?

Dev_noob:

Je suis tombé sur ce problème HackerRank et la regex doit correspondre à la chaîne entre les balises HTML. La regex et la chaîne est

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

Aussi si le « str » a plus d'un balises HTML comme String str="<h1><h1>Hello World!</h1></h1>"et comment les ([^<]+)prises cette « str ».

Ma question est de savoir comment ([^<]+)correspond à la « str » et non ([a-zA-Z]+).

Ici, si le code source complet:

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");
            }
        }
    }
}

Ne pas l'esprit si je suis stupide de poser cette question et je vous remercie à l'avance!

Physicien Mad:

Cette regex garantit que votre chaîne ne contient qu'une seule étiquette, en supposant bien formé entrée HTML.

Les premières <(.+)>captures le nom de votre balise. Le groupe de capture sera également obtenir des attributs qu'il peut. Depuis +un quantificateur gourmand, il capture plusieurs balises si elle peut.

Les fuite </\\1>matchs contre quel que soit le premier groupe capturé. Voilà pourquoi, si votre HTML est bien formé, l'expression ne sera pas capturer plusieurs balises ou tags avec des attributs:

  • Balise d' ouverture <h1>, balise de fermeture </h1>
  • Balise d' ouverture <h1 attr="value">, balise de fermeture </h1>, mais attend</h1 attr="value">
  • Balise d' ouverture <h1><h2>, balise de fermeture </h2></h1>, mais attend</h1><h2>

Voilà pourquoi la balise peut être Matche avec .+plutôt en toute sécurité, alors que le contenu doit être assorti [^<]+. Vous voulez vous assurer que vous ne prenez pas de balises séjour dans le contenu, mais tout autre caractère à tout est permis. [^<]+(prononcé. « pas <, au moins une fois) permet des choses comme !, tout [A-za-z]ne serait certainement pas.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=202849&siteId=1
conseillé
Classement