Cette fois, je vais vous montrer comment utiliser des expressions régulières pour trouver des lookarounds. Quelles sont les précautions concernant l'utilisation d'expressions régulières pour trouver des lookarounds. Voici des cas pratiques, jetons un coup d'œil.
Les exemples de cet article décrivent la recherche avant et après le didacticiel Expression régulière. Partagez-le avec tout le monde pour référence, comme suit :
Remarque : Dans tous les exemples, les résultats de correspondance des expressions régulières sont inclus dans le texte source [ et ], quelques exemples seront implémentés en utilisant Java. S'il s'agit de l'utilisation d'expressions régulières dans Java lui-même, cela sera expliqué à l'endroit correspondant. Tous les exemples Java sont testés sous JDK1.6.0_13.
1. Introduction au problème
Dans une page HTML, faites correspondre le texte entre une paire de balises, par exemple en faisant correspondre les balises de la page, c'est-à-dire , < Texte entre title> et :
Texte :
Expression régulière :<[Tt][Ii][Tt][Ll][Ee]>.*? [Tt][Ii][Tt][Ll][Ee ; 🎜> Analyse : <[Tt][Ii][Tt][Ll][Ee]> signifie qu'il n'est pas sensible à la casse. Ce modèle correspond à la balise de titre et au texte entre eux, mais il l'est. pas parfait Parce que nous voulons uniquement le texte entre les balises de titre, pas les balises elles-mêmes. Pour résoudre ce problème, nous devons utiliser lookaround.
2. Recherche avant La recherche avant spécifie un modèle qui doit correspondre mais qui n'est pas renvoyé dans le résultat. La recherche avant est en fait une sous-expression qui commence par ?= et le texte à rechercher suit =.
Regardez un exemple de mise en correspondance de la partie protocolaire d'une adresse URL :
Texte : http://blog.csdn.net/mhmyqn
Expression régulière : .
+(?=:)Résultat : [http]
://blog.csdn.net/mhmyqnAnalyse : La partie protocole dans l'adresse URL est la partie avant :, le modèle .+ correspond à n'importe quel texte, la sous-expression (?=:) correspond à :, mais le correspondant : n'apparaît pas dans le résultat. Nous utilisons ?= pour indiquer au moteur d'expression régulière que tant que : est trouvé, tout ira bien, mais il ne sera pas inclus dans le résultat final renvoyé. Si vous n'utilisez pas la correspondance directe (?=:) ici, mais utilisez (:) directement, alors le résultat de la correspondance sera http:, qui inclut :, ce qui n'est pas ce que nous voulons.
Remarque : La recherche recto et verso devant et derrière fait référence à la position relative entre le motif et le texte à rechercher. La gauche est le recto et la droite est le verso. Autrement dit, la recherche vers l'avant est : xxx(?=xxx), et la recherche vers l'arrière est (?<=xxx)xxx. La recherche vers l'arrière sera ensuite introduite.
3. Recherche arrièreL'opérateur de recherche arrière est ?<=. Cependant, toutes les implémentations d'expressions régulières ne prennent pas en charge la recherche arrière. JavaScript ne la prend pas en charge.
Par exemple, si vous souhaitez retrouver le prix dans le texte (commençant par $, suivi d'un chiffre), le résultat ne contient pas le symbole monétaire : Texte :
catégorie1 : 136,25 $, catégorie2 : 28 $, catégorie3 : 88,60 $(?<=$)d+(.d+)?Résultat : catégorie 1 :$ 【136,25】
,catégorie 2 :$【28】,catégorie 3 :$
【88,60】 Analyse : (?<=$) Le modèle correspond à $,d+(.d+) ? Le modèle correspond à des nombres entiers ou décimaux. Comme le montrent les résultats, le résultat n’inclut pas le symbole monétaire, mais uniquement le prix. Que se passerait-il si nous n'utilisions pas la recherche en arrière ? Utilisez le modèle $d+(.d+)?, qui inclura $ dans le résultat. L'utilisation du modèle d+(.d+) correspondra également aux nombres de la catégorie1(23), ce qui n'est pas ce que nous voulons. Remarque : la longueur du modèle de recherche avant est variable, ils peuvent contenir des métacaractères tels que ., *, + tandis que le modèle de recherche arrière ne peut être que de longueur fixe, il ne peut pas le faire. contiennent des métacaractères tels que ., *, +. 4. Combinez la recherche avant et la recherche arrière Utilisez ensemble la recherche avant et la recherche arrière pour résoudre le problème précédent Problème avec le texte entre les balises HTML : Texte : Expression régulière : (?<=<[Tt][Ii][Tt][Ll][Ee]>).*?(?= [Tt][ Ii][Tt][Ll][Ee] >) Résultat : 5. Annulez les recherches avant et arrière Opérateurs de recherche avant et après : J'ai payé 30 $ pour 10 pommes, 15 oranges et 10 poires . J'ai économisé 5$ sur cette commande. (?<=$)d+ J'ai payé 【30 $】 pour 10 pommes, 15 oranges et 10 poires. J'ai économisé 【5 $】 sur cette commande. >Texte : J'ai payé 30 $ pour 10 pommes, 15 oranges et 10. poires. J'ai économisé 5$ sur cette commande. Expression régulière : b(? Résultat : 【10】 pommes, 【15】 【10】 poires. J'ai économisé 5 $ sur cette commande. Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Veuillez suivre php pour des informations plus intéressantes. Autres articles connexes sur le site Web chinois ! Lecture recommandée :
Implémenté avec php et js Regular mot de passe correspondant aux chiffres et aux lettres
Par exemple, il y a un prix dans un morceau de texte (commençant par $ , suivi d'un chiffre) et Quantité, nous devons connaître le prix et la quantité, regardons d'abord le prix : Texte :
(?=)
正向前查找
(?!)
负向前查找
(?<=)
正向后查找
(?
负向后查找
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!