L'exemple de cet article décrit la correspondance répétée du didacticiel d'expression régulière. Partagez-le avec tout le monde pour votre référence, comme suit :
Remarque : dans tous les exemples, les résultats de correspondance des expressions régulières sont inclus entre [et] dans le texte source. Certains exemples seront implémentés en utilisant Java. Les expressions régulières en Java lui-même seront expliquées aux endroits correspondants. Tous les exemples Java sont testés sous JDK1.6.0_13.
1. Combien y a-t-il de correspondances ?
Les articles précédents parlaient de la correspondance d'un caractère, mais un caractère ou un ensemble de caractères doit être associé plusieurs fois. Par exemple, si vous souhaitez faire correspondre une adresse e-mail, en utilisant la méthode mentionnée précédemment, quelqu'un peut écrire une expression régulière comme w@w.w, mais cela ne peut correspondre qu'à des adresses comme a@b.c, ce qui est évidemment incorrect. Voyons ensuite comment. pour faire correspondre les adresses e-mail.
Tout d'abord, vous devez connaître la composition d'une adresse email : un groupe de caractères commençant par un caractère alphanumérique ou un trait de soulignement, suivi du symbole @, puis du nom de domaine, c'est-à-dire nom d'utilisateur@nom de domaine. adresse. Cependant, cela dépend également du fournisseur de services de messagerie spécifique. Certains autorisent également les caractères .
1. Faites correspondre un ou plusieurs caractères
Pour faire correspondre plusieurs répétitions du même caractère (ou ensemble de caractères), ajoutez simplement un caractère comme suffixe. Correspond à un ou plusieurs caractères (au moins un). Par exemple : a correspond à a lui-même, a correspondra à un ou plusieurs a consécutifs ; [0-9] correspond à plusieurs nombres consécutifs.
Remarque : lors de l'ajout d'un suffixe à un jeu de caractères, vous devez le placer en dehors du jeu de caractères, sinon il ne s'agira pas d'une correspondance répétée. Par exemple, [0-9] représente des nombres ou des nombres. Bien que ce soit grammaticalement correct, ce n'est pas ce que nous voulons.
Texte : Bonjour, mhmyqn@qq.com ou mhmyqn@126.com est mon email.
Expression régulière : w @(w.) w
Résultat : Bonjour , [mhmyqn@qq.com] ou [mhmyqn@126.com] est mon email.
Analyse : w peut correspondre à un ou plusieurs caractères, et la sous-expression (w .) peut correspondre à quelque chose comme xxxx Une chaîne comme .edu. ne se terminera pas par un caractère . Les adresses e-mail telles que mhmyqn@xxxx.edu.cn seront également mises en correspondance.
2. Faites correspondre zéro ou plusieurs caractères
Faites correspondre zéro ou plusieurs caractères en utilisant le métacaractère * Son utilisation est exactement la même, il suffit de le mettre dans le caractère ou le jeu de caractères Après , vous pouvez faire correspondre. zéro ou plusieurs occurrences consécutives du caractère (ou de l'ensemble de caractères). Par exemple, l'expression régulière ab*c peut correspondre à ac, abc, abbbbc, etc.
3. Faire correspondre zéro ou un caractère
Utiliser un métacaractère ? pour faire correspondre zéro ou un caractère. Comme mentionné dans l'article précédent, l'expression régulière rnrn est utilisée pour faire correspondre une ligne vide, mais sous Unix et Linux, r n'est pas requis, donc le métacaractère ?, r?nr?n peut être utilisé pour faire correspondre des lignes vides sous Windows, ainsi que Correspond aux lignes vides sous Unix et Linux. Regardons un exemple d'URL qui correspond au protocole http ou https :
Texte : L'URL est http://www.mikan.com, pour vous connecter en toute sécurité, utilisez plutôt https://www.mikan.com .
Expression régulière : https?://(w .) w
Résultat : L'URL est [http://www.mikan.com], pour vous connecter en toute sécurité utilisez [https : / /www.mikan.com] à la place.
Analyse : Ce modèle commence par https?, ce qui signifie que le caractère avant ? peut exister ou non, il peut donc correspondre à http ou https, et à cette dernière partie. est le même que le précédent.
2. Nombre de répétitions correspondantes
Les expressions régulières, * et ? résolvent de nombreux problèmes, mais :
1) Le nombre de caractères correspondants avec * n'est pas une limite supérieure. . Il n'existe aucun moyen de définir un nombre maximum de caractères auxquels ils correspondront.
2) , * et ? correspondent à au moins un ou zéro caractères. Nous ne pouvons pas définir un autre nombre minimum de caractères pour lesquels ils correspondront.
3) Si nous utilisons uniquement * et , nous ne pouvons pas définir le nombre de caractères auxquels ils correspondent à un nombre exact.
Les expressions régulières fournissent une syntaxe pour définir le nombre de répétitions. Le nombre de répétitions doit être indiqué à l'aide des caractères { et }, et la valeur doit être écrite entre eux.
1. Définissez une valeur exacte pour le nombre de correspondances répétées
Si vous souhaitez définir une valeur exacte pour le nombre de correspondances répétées, écrivez simplement le nombre entre { et }. Par exemple, {4} signifie que le caractère (ou l'ensemble de caractères) qui le précède doit être répété 4 fois dans le texte original pour être considéré comme une correspondance. S'il n'apparaît que 3 fois, il n'est pas considéré comme une correspondance.
Comme mentionné dans les articles précédents pour des exemples de correspondance des couleurs sur la page, vous pouvez utiliser le nombre de répétitions pour faire correspondre : #[[:xdigit:]]{6} ou #[0-9a-fA -F ]{6}, les caractères POSIX sont #\p{XDigit}{6} en Java.
2. Définir un intervalle pour le nombre de correspondances répétées. La syntaxe
{} peut également être utilisée pour définir un intervalle pour le nombre de correspondances répétées, c'est-à-dire définir une valeur minimale et maximale. valeur. Ces intervalles doivent être donnés sous la forme {n, m}, où n>=m>=0. Par exemple, une expression régulière qui vérifie si le format de date est correct (sans vérifier la validité de la date) (comme la date 2012-08-12 ou 2012-8-12) : d{4}-d{1, 2}-d{1, 2}.
3. Au moins combien de fois le match doit-il être répété
La dernière utilisation de la syntaxe{} est de donner un nombre minimum de répétitions (mais pas nécessairement un nombre maximum de répétitions), comme {3,} indiquant au moins 3 répétitions. Remarque : Il doit y avoir une virgule entre {3,} et il ne peut pas y avoir d'espace après la virgule. Sinon, quelque chose ne va pas.
Regardons un exemple, utilisez des expressions régulières pour trouver tous les montants supérieurs à 100 $ :
Texte :
25,36 $
125,36 $
205,0$
2500,44$
44,30$
Expression régulière : $d{3,}.d{2}
Résultat :
25,36 $
【125,36 $】
【205,0 $】
【2500,44 $】
44,30 $
,*, ? de répétitions :
équivaut à {1,}
* équivaut à {0,}
équivaut à {0,1}
3. Empêcher la sur-correspondance ? Il ne peut correspondre qu'à zéro ou un caractère {n} et {n,m} ont également une limite supérieure sur le nombre de répétitions correspondantes, mais il n'y a pas de limite supérieure. pour le nombre de répétitions correspondantes comme *, , {n,} Limite supérieure, ce qui conduit parfois à une sur-correspondance. Regardons un exemple de correspondance avec une balise htmlTexte : Hier c'est histoire, demain est un mystère< ;/ B>, mais aujourd'hui c'est un cadeau.Expression régulière : <[Bb]>.*[Bb]> Résultat : Hier c'est [histoire, demain est un mystère, mais aujourd'hui c'est un cadeau]. Analyse : <[Bb]> correspond aux balises (insensible à la casse), [Bb]> correspond aux balises Mais le résultat n'est pas trois comme prévu. Tout, de la première balise à la dernière balise Pourquoi cela se produit-il ? Parce que * et sont tous deux des métacaractères gourmands, leur modèle de comportement lors de la correspondance est d'autant plus grand qu'ils feront de leur mieux pour correspondre du début à la fin du texte, plutôt que du début à la fin du texte. .jusqu'au premier match. Des versions paresseuses de ces métacaractères peuvent être utilisées lorsqu'un tel comportement gourmand n'est pas requis. Paresseux signifie faire correspondre le moins de caractères possible, par opposition à gourmand. Les métacaractères paresseux n'ont besoin que d'ajouter un suffixe ? aux métacaractères gourmands. Voici la version paresseuse du métacaractère gourmand : * *? Dans l'exemple ci-dessus, l'expression régulière doit uniquement être modifiée en <[Bb]>.*?< ;/[Bb]>. Le résultat est le suivant : histoiremystère giftQuatre RésuméExpression régulière Le vrai pouvoir se reflète dans la correspondance des répétitions. Nous introduisons ici l'utilisation de métacaractères tels que , * et ? Si vous souhaitez déterminer avec précision le nombre de correspondances, utilisez {}. Il existe deux types de métacaractères : gourmands et paresseux. Lorsque vous devez éviter une correspondance excessive, veuillez utiliser des métacaractères paresseux pour construire des expressions régulières. L'appariement de position sera introduit dans le prochain article. J'espère que cet article sera utile à tout le monde pour apprendre les expressions régulières. Pour plus de didacticiels sur les expressions régulières sur les correspondances répétées et les articles connexes, veuillez faire attention au site Web PHP chinois !