Maison  >  Article  >  interface Web  >  Comment utiliser des expressions régulières pour trouver des recherches

Comment utiliser des expressions régulières pour trouver des recherches

php中世界最好的语言
php中世界最好的语言original
2018-03-30 09:21:151209parcourir

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 : bienvenue sur ma page

Expression régulière :<[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/mhmyqn

Analyse : 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ère

L'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 $

Expression régulière :

(?<=$)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 : bienvenue sur ma page

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

Résultat :<span style="color: #ff6600">【bienvenue sur ma page】</span>< </span></p>Analyse : Comme le montrent les résultats, le problème est parfaitement résolu. (?<=<[Tt][Ii][Tt][Ll][Ee]>) est une opération en arrière, qui correspond à <title> 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 si la position du texte du résultat correspondant qui est renvoyé (en spécifiant quel texte doit être avant et après le résultat correspondant). 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 :

(?=) 正向前查找
(?!) 负向前查找
(?<=) 正向后查找
(? 负向后查找
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 :

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

Expression régulière :

(?<=$)d+

Résultat :

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 :

I J'ai payé 30 $ pour

【10】 pommes, 【15】

oranges et

【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 :

Tutoriel de correspondance de position du didacticiel d'expression régulière (avec code)

Implémenté avec php et js Regular mot de passe correspondant aux chiffres et aux lettres

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!

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