Maison  >  Article  >  développement back-end  >  Explication détaillée du didacticiel lookaround avant et après les expressions régulières

Explication détaillée du didacticiel lookaround avant et après les expressions régulières

高洛峰
高洛峰original
2017-01-22 14:23:031421parcourir

Les exemples de cet article décrivent la recherche avant et après le didacticiel sur les expressions régulières. 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. Introduction du problème

Dans la page HTML, faites correspondre le texte entre une paire de balises, par exemple en faisant correspondre les balises de la page, c'est-à-dire entre

Texte entre :

Texte :

bienvenue sur ma page

Expression régulière : .*? [Tt][Ii][Tt][Ll][Ee]>

Résultat :

bienvenue sur ma page

Analyse : , ce modèle correspond aux balises de titre et au texte entre elles, mais il n'est pas parfait car 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 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 correspondance de la partie protocole d'une adresse URL :

Texte : http://blog.csdn.net/mhmyqn

Expression régulière : (. ?=:)

Résultat : [http]://blog.csdn.net/mhmyqn

Analyse : La partie protocole de l'adresse URL est la partie avant :, modèle Correspond à n'importe quel. text , 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 se réfère à 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 (?

3. Recherche arrière

L'opérateur de recherche arrière est ?

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 $

Expression régulière : (?

Résultat : catégorie1 :$【136,25】,catégorie2 :$【28 】,category3:$【88.60】

Analyse : (?

Remarque : la longueur du modèle de recherche avant est variable et peut contenir des métacaractères tels que ., *, etc., tandis que le modèle de recherche arrière ne peut être que de longueur fixe et ne peut pas contenir ., * ; , et autres.

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 du texte entre les balises HTML précédentes :

Texte :

bienvenue sur ma page

Expression régulière : (? ).*?(?= [Tt][Ii][Tt][Ll][Ee]>)

Résultat :

[bienvenue sur ma page]

Analyse : Comme le montrent les résultats, le problème est parfaitement résolu. (?) est une opération en arrière, qui correspond à

mais ne le consomme pas, (?=[Tt ][Ii][Tt][Ll][Ee]>) est une opération avant qui correspond à mais ne le consomme pas. Le résultat final correspondant renvoyé contient uniquement le texte entre les balises.

5. Annulez les recherches avant et arrière

La recherche avant et la recherche arrière mentionnées précédemment sont généralement utilisées pour faire correspondre le texte, et leur but est de déterminer le résultat correspondant qui sera renvoyé La position du texte (en précisant quel texte doit précéder et suivre le résultat de la correspondance). Cette utilisation est appelée recherche avant et recherche avant. Il existe également une recherche avant négative et une recherche arrière négative, qui trouvent le texte qui ne correspond pas à un modèle donné. Opérateurs de recherche avant et après

 :

Explication détaillée du didacticiel lookaround avant et après les expressions régulières

Par exemple, il y a un prix (commençant par $, suivi d'un chiffre) et une quantité dans un morceau de texte. Nous voulons trouver le prix et la quantité. Cherchons d'abord le prix :

. Texte : J'ai payé 30 $ pour 10 pommes, 15 oranges et 10 poires. J'ai économisé 5 $ sur cette commande.

Expression régulière : (?

Résultat : 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 : J'ai payé 30 $ pour [10] pommes, [15] oranges et [10] poires. J'ai économisé 5 $ sur cette commande.

Analyse : (?

6. Résumé

Avec la recherche avant et arrière, vous pouvez avoir un contrôle précis sur le contenu inclus dans le résultat final de la correspondance. L'opération de recherche avant et après nous permet d'utiliser des sous-expressions pour spécifier l'emplacement où l'opération de correspondance de texte se produit et d'obtenir l'effet de correspondance uniquement mais pas de consommation.

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, veuillez prêter attention au site Web PHP chinois pour des articles détaillés sur la recherche avant et après !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn