Cet article décrit les caractères chinois dans le tag un match régulier en Java. Partagez-le pour votre référence, comme suit:
Aujourd'hui, un ami du groupe a posé une question sur les expressions régulières, qui contient le contenu suivant:
<a href = 'www.baidu.comds = id32434 # comment'rewr> spécial432 </a> 453543 <a guhll ,, l> a1special123 Êtes-vous? </a> <a href = id = 32434 # comment'ewrer> spécial 2 </a> <a> texte 2 </a> <a> texte </a>
Maintenant, vous voulez faire correspondre les caractères chinois dans la balise <a> dont le contenu contient le chinois mais dont les attributs ne contiennent pas de commentaires.
La solution est la suivante:
1. Faites d'abord correspondre à la balise <a> qui n'inclut pas les commentaires;
2. Faites un match quadratique dans le résultat correspondant pour produire le chinois;
Le code est le suivant:
Package com.mmq.regex; import java.util.regex.matcher; import java.util.regex.pattern; / ** * @Use correspond aux caractères chinois dans le <a> tag de html * @projectname truc * @author mumaoqiang * @fullname com.mmq.regex. 1.6.0 * @version 1.0 * / classe publique MatchChineSECharacters {/ ** * En fonction de l'entrée, correspondez aux caractères chinois dans la balise <a> qui contient chinois mais ne contient pas de commentaire * @param Source Content pour correspondre * @return Chinese Characte "<a ((?! Commentaire).) *?> ([^ <>] *? [// u4e00 - // u9fa5] + [^ <>] *?) + (? = </a>)"; Modèle motif = motif.compile (reg); Matcher Matcher = Pattern.matcher (source); StringBuilder Caractère = new StringBuilder (); while (Matcher.Find ()) {String result = Matcher.Group (); System.out.println (résultat); // Faire la régularisation quadratique du résultat et correspondez à la chaîne de caractères chinois reg1 = "[// u4e00 - // u9fa5] +"; Modèle P1 = Pattern.Compile (Reg1); Matcher M1 = p1.matcher (résultat); while (m1.find ()) {caractères.append (m1.group ()); } //System.out.println (caractères.toString ()); } return caractères.toString (); } public static void main (string [] args) {String result = matchChineScarActers ("<a href = 'www.baidu.comds = id32434 # comment'rewr> spécial432 </a> 453543 <a guhll ,, l> a1special123hello123? </a> <a <a href = id = 32434 # comment'ewrer> spécial2 </a> <a> text2 </a> <a> text </a> "); System.out.println (résultat); }}Le résultat de sortie est le suivant:
<a guhll ,, l> a1special123 Bonjour 123? <a> Texte dans la balise, comment vas-tu?
Voici une explication:
String reg = "<a ((?! Commentaire).) *?> ([^ <>] *? [// u4e00 - // u9fa5] + [^ <>] *?) + (? = </a>)";
Ce contenu correspondant contient chinois mais l'attribut de balise ne contient pas de commentaires. Recherche arrière? <= Impossible à être utilisé, car la recherche arrière ne peut être contenu que de longueur fixe. Les attributs de la balise sont incertains, ils ne peuvent donc pas être utilisés; [// u4e00 - // u9fa5] + correspond aux cordes chinoises; tandis que (? = </a>) utilise la recherche avant? =, et la balise de fin ne sera pas incluse dans le résultat.
Ce problème a été résolu. Si vous souhaitez correspondre au contenu spécifié dans la balise spécifiée, il est également facile à améliorer. S'il y a de meilleures règles, veuillez laisser un message pour apprendre les uns des autres.
PS: Voici deux outils d'expression régulière très pratiques pour votre référence:
Tool de test en ligne d'expression régulière JavaScript:
http://tools.vevb.com/regex/javascript
Outil de génération en ligne d'expression régulière:
http://tools.vevb.com/regex/create_reg
J'espère que cet article sera utile à la programmation Java de tous.