Table des matières
2. Lookahead and lookbehind assertions
3. Nommé des groupes de capture
4. Modificateurs pour l'appariement flexible
5. Modèles récursifs et groupes d'équilibrage
6. Gestion UTF-8 et Unicode
Conseils finaux
Maison développement back-end tutoriel php Correspondance de modèle avancée avec les fonctions PCRE de PHP

Correspondance de modèle avancée avec les fonctions PCRE de PHP

Jul 28, 2025 am 04:41 AM
PHP Strings

La fonction PCRE de PHP prend en charge les fonctions régulières avancées, 1. Utilisez Capture Group () et le groupe non capture (? :) pour séparer le contenu correspondant et améliorer les performances; 2. Utilisez des assertions de préemption positive / négative (? =) Et (?!)) Et des assertions post-post (? ); 4. Utilisez des modificateurs I, M, S, X et autres pour atteindre les modèles de correspondance et d'extension insensibles à la casse, multi-lignes, à point de point; 5. Utiliser (? R) pour faire correspondre récursivement les structures imbriquées telles que les supports; 6. Ajoutez le modificateur U pour traiter les caractères UTF-8 et Unicode pour assurer une correspondance correcte du texte multilingue, et enfin combiner des séparateurs Preg_quote et de motifs pour implémenter en toute sécurité et efficacement le traitement de texte complexe.

Correspondance de modèle avancée avec les fonctions PCRE de Php \

Les fonctions PCRE (Perl compatibles régulières) de PHP fournissent des outils puissants pour la correspondance de motifs avancés, allant bien au-delà des recherches de chaînes simples. Avec des fonctions comme preg_match , preg_match_all , preg_replace et preg_split , vous pouvez extraire, valider et manipuler du texte à l'aide de modèles complexes. Voici comment tirer parti de certaines des fonctionnalités les plus avancées efficacement.

Correspondance de modèle avancée avec les fonctions PCRE de PHP

1. Utilisation de groupes de capture et de non-capture

Les groupes de regex vous permet d'isoler des parties d'une correspondance pour une utilisation ultérieure. Parentesses () créent des groupes de capture , qui stockent le contenu apparié pour les back-références ou l'extraction.

 $ sujet = "John Doe, 35 ans";
preg_match ('/ (\ w) (\ w), (\ d) /', $ sujet, $ correspond);

// $ correspond [1] = "John", $ correspond [2] = "Doe", $ correspond [3] = "35"

Mais si vous n'avez besoin que de regroupement pour la structure logique (par exemple, l'altération) sans capturer, utilisez des groupes non capturés (?:...) Pour améliorer les performances et réduire l'encombrement.

Correspondance de modèle avancée avec les fonctions PCRE de PHP
 preg_match ('/ (?: M. | ms | dr) \. (\ w) /', 'Dr Smith', $ correspond);
// $ correspond [1] = "Smith" - titre non capturé

Ceci est utile lors de l'analyse de grands textes où vous n'avez pas besoin de chaque sous-plier enregistré.


2. Lookahead and lookbehind assertions

PCRE prend en charge les affirmations zéro largeur , qui correspondent à une position basée sur ce qui vient avant ou après, sans inclure ce contexte dans le résultat.

Correspondance de modèle avancée avec les fonctions PCRE de PHP
  • Lookahead positif (?=...) : assure ce qui suit les correspondances.
  • Lookahead négatif (?!...) : s'assure que ce qui suit ne correspond pas .
  • LookBehind positif (?<=...) : assure ce qui précède les correspondances.
  • LookBehind négatif (?<!...) : garantit ce que les précèdes ne correspondent pas .

Exemple: Faites correspondre les mots de passe contenant au moins un chiffre et une lettre:

 $ mot de passe = "pass123";
if (preg_match (&#39;/ ^ (? =. * [a-za-z]) (? =. * \ d). {8,} $ /&#39;, $ mot de passe)) {
    écho "mot de passe valide";
}

Ici, (?=.*[a-zA-Z]) vérifie que quelque part dans la chaîne, il y a une lettre, et (?=.*\d) vérifie un chiffre - tous deux sans les caractères consommés.

Un autre exemple: remplacer les numéros uniquement s'ils ne sont pas précédés d'un $ :

 $ text = "Prix: 100 $ et taxe 15";
echo preg_replace (&#39;/ (? <! \ $) \ b \ d \ b /&#39;, &#39;x&#39;, $ text);
// Production: "Prix: 100 $ et taxe x"

3. Nommé des groupes de capture

Au lieu de se souvenir des indices numériques, utilisez des groupes nommés pour un code plus clair et maintenable.

 $ sujet = "Email: user@example.com";
preg_match (&#39;/ (? <e-mail> [\ w.-] @ [\ w.-]) /&#39;, $ sujet, $ correspond);

echo $ correspond [&#39;e-mail&#39;]; // "user@example.com"

Vous pouvez également référencer les groupes nommés dans les remplacements:

 preg_replace (&#39;/ hello (? <name> \ w) /&#39;, &#39;hi $ {name}&#39;, &#39;Bonjour Alice&#39;);
// Résultats: "Salut Alice"

Cela rend vos modèles plus faciles à lire et à déboguer, en particulier dans les grands projets.


4. Modificateurs pour l'appariement flexible

Le PCRE prend en charge les modificateurs de motifs qui modifient le comportement du regex:

  • i - correspondance insensible à la cas
  • m - MODE MULTIONNELLE ( ^ et $ Match Line démarre / se termine)
  • s - Mode Dotall ( . correspond à Newlines)
  • x - Mode étendu (permet un espace et des commentaires dans le motif)

Exemple avec x Modiftifier:

 $ Pattern = &#39;
    \ b
    (? <Nearn> \ d {4}) # année
    [- /]
    (? <mois> \ d {2}) # mois
    [- /]
    (? <Day> \ d {2}) # jour
/ x &#39;;

preg_match ($ Pattern, &#39;Date: 2023-12-25&#39;, $ correspond);
print_r ($ correspond);

Cela améliore la lisibilité pour des modèles complexes.


5. Modèles récursifs et groupes d'équilibrage

Le PCRE prend en charge les sous-bassins récursifs en utilisant (?R) ou (?0) , utile pour faire correspondre les structures imbriquées comme ParentsTheses ou des balises de type HTML.

Correspond aux parents équilibrés:

 $ sujet = "(a (b (c) d) e)";
$ Pattern = &#39;/ \ ((?: [^ ()] | (? R)) * \) /&#39;;

if (preg_match ($ motif, $ sujet, $ correspond)) {
    Echo $ correspond [0]; // "(a (b (c) d) e)"
}

Cela correspond à un contenu récursivement à l'intérieur des parents, même lorsqu'il est imbriqué.

⚠️ Remarque: Bien que cela fonctionne pour des cas simples, évitez d'utiliser Regex pour l'analyse complète HTML / XML - utilisez plutôt un analyseur approprié.


6. Gestion UTF-8 et Unicode

Pour travailler avec Unicode Strings (par exemple, emojis, caractères accentués), ajoutez le modificateur u :

 $ text = "Café?";
if (preg_match (&#39;/ ^ \ w / u&#39;, $ text, $ correspond)) {
    Echo $ correspond [0]; // "Café"
}

Sans u , les séquences UTF-8 peuvent provoquer des erreurs ou des correspondances incorrectes.

Vous pouvez également utiliser les propriétés Unicode:

 // correspond à n&#39;importe quelle lettre de n&#39;importe quelle langue
preg_match (&#39;/ ^ \ p {l} / u&#39;, &#39;Café&#39;, $ correspond);

Conseils finaux

  • Délimitez toujours vos modèles (par exemple, avec / , # ou ~ ) pour éviter la collision de délimiteur.
  • Utilisez preg_quote() lors de l'intégration de la saisie de l'utilisateur dans les modèles.
  • Test des modèles complexes avec des outils comme regex101.com (sélectionnez PCRE).
  • Soyez prudent avec le retour en arrière dans les grandes intrants - cela peut entraîner des problèmes de performances.

La correspondance avancée de motifs en PHP devient beaucoup plus puissante lorsque vous dépassez les groupes de base et adoptez des groupes, des assertions, de la récursivité et du support Unicode. Utilisé à bon escient, le PCRE peut tout gérer, de l'analyse du journal à la validation d'entrée avec l'élégance.

Fondamentalement, la clé est de savoir quelles fonctionnalités atteindre - et quand ne pas les abaisser.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Manipulation défensive des cordes: prévenir les XS et les attaques d'injection en PHP Manipulation défensive des cordes: prévenir les XS et les attaques d'injection en PHP Jul 25, 2025 pm 06:03 PM

TODEFENDAGAINSTXSSSANDINIFFRIMESS

Techniques de formatage de chaîne avancées avec `sprintf` et` vsprintf` Techniques de formatage de chaîne avancées avec `sprintf` et` vsprintf` Jul 27, 2025 am 04:29 AM

Sprintf et VSprintf fournissent des fonctions de formatage de chaîne avancées dans PHP. Les réponses sont: 1. La précision du point flottant et le% D peuvent être contrôlées via% .2f, et le type entier peut être assuré avec D, et un rembourrage zéro peut être obtenu avec D; 2. La position variable peut être fixée en utilisant des espaces réservés de position tels que% 1 $ s et% 2 $ d, ce qui est pratique pour l'internationalisation; 3. L'alignement gauche et l'alignement droit peuvent être obtenus via% -10S, ce qui convient à la sortie du tableau ou du journal; 4. VSprintf prend en charge les paramètres du tableau pour faciliter la génération dynamique de modèles SQL ou de messages; 5. Bien qu'il n'y ait pas d'espace réservé d'origine, la syntaxe {name} peut être simulée via des fonctions de rappel régulières, ou le tableau associatif peut être utilisé en combinaison avec extract (); 6. substr_co

Au-delà de JSON: comprendre la sérialisation des cordes native de PHP Au-delà de JSON: comprendre la sérialisation des cordes native de PHP Jul 25, 2025 pm 05:58 PM

La sérialisation native de PHP est plus adaptée au stockage et à la transmission des données internes de PHP que JSON, 1. Parce qu'il peut conserver des types de données complets (tels que INT, Float, Bool, etc.); 2. Soutenir les propriétés d'objets privées et protégées; 3. Peut gérer les références récursives en toute sécurité; 4. Il n'y a pas besoin de conversion de type manuel pendant la désérialisation; 5. C'est généralement mieux que JSON en performance; Mais il ne doit pas être utilisé dans des scénarios transversaux, et Unserialize () ne doit jamais être appelé pour des entrées non fiables pour éviter de déclencher des attaques d'exécution de code distantes. Il est recommandé de l'utiliser lorsqu'il est limité à l'environnement PHP et nécessite des données à haute fidélité.

Manipulation de cordes au niveau des caractères et ses implications de performance Manipulation de cordes au niveau des caractères et ses implications de performance Jul 26, 2025 am 09:40 AM

Caractéristique à niveau le niveau

Traitement de chaîne économe en mémoire pour les grands ensembles de données dans PHP Traitement de chaîne économe en mémoire pour les grands ensembles de données dans PHP Jul 26, 2025 am 09:42 AM

ProcessLargeFilesLin-by-lineOrinChunksusingFgets () ouFread () PauteflooDingEnteRireFilesIntoMeMoryWithFile () ORFILE_GET_CONTENTS (). 2.MinimizeUnseCSaryStringCopiesByAvoidingChainedStringSwection

Déballage des données binaires: un guide pratique de `pack () de PHP` et `unback () ' Déballage des données binaires: un guide pratique de `pack () de PHP` et `unback () ' Jul 25, 2025 pm 05:59 PM

Les fonctions PHP Pack () et Unpack () sont utilisées pour convertir entre les variables PHP et les données binaires. 1.Pack () Packages Packages Variables telles que les entiers et les chaînes dans les données binaires, et déballer () déballe les données binaires en variables PHP. Les deux s'appuient sur les chaînes de format pour spécifier les règles de conversion. 2. Les codes de format commun incluent C / C (8 bits avec / caractères non signés), S / S (entier court 16 bits), L / L / V / N (entier de longue précision 32 bits), A / A (Fill String), X (Null Byte), etc. Grand-endian (norme réseau). V doit être utilisé en premier lors de la communication sur les plateformes.

Navigation du labyrinthe de PHP String Encoding: UTF-8 et au-delà Navigation du labyrinthe de PHP String Encoding: UTF-8 et au-delà Jul 26, 2025 am 09:44 AM

Le traitement UTF-8 doit être géré manuellement dans PHP, car PHP ne prend pas en charge Unicode par défaut; 1. Utilisez l'extension MBSTRING pour fournir des fonctions de sécurité multi-octets telles que MB_STRLEN, MB_SUBSTR et spécifiez explicitement le codage UTF-8; 2. Assurez-vous que la connexion de la base de données utilise un jeu de caractères UTF8MB4; 3. Déclarer UTF-8 via les en-têtes HTTP et les balises HTML Meta; 4. Vérifiez et convertissez l'encodage lors de la lecture et de l'écriture de fichiers; 5. Assurez-vous que les données sont UTF-8 avant le traitement JSON; 6. Utilisez MB_DETECT_ENCODING et ICONV pour la détection et la conversion de codage; 7. La prévention de la corruption des données est meilleure que post-réparation, et UTF-8 doit être utilisée à tous les niveaux pour éviter les problèmes de code brouillé.

Résolution des pièges communs avec des octets nuls et une terminaison de chaîne en PHP Résolution des pièges communs avec des octets nuls et une terminaison de chaîne en PHP Jul 28, 2025 am 04:42 AM

Nullbytes (\ 0) cancauseUnExpected BehaviorinPhpwhenInterfacing withTextensionsorSystemCallsBecausects \ 0asastringterminator, EventHoughPhpStringSaSaBinary-sawendpreservefullthrength.2.infileoperations, fileNaMSContingNullbyteslik "config.txt \ 0.p

See all articles