


Correspondance de modèle avancée avec les fonctions PCRE de PHP
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.
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.

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.

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.

- 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 ('/ ^ (? =. * [a-za-z]) (? =. * \ d). {8,} $ /', $ 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 ('/ (? <! \ $) \ b \ d \ b /', 'x', $ 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 ('/ (? <e-mail> [\ w.-] @ [\ w.-]) /', $ sujet, $ correspond); echo $ correspond ['e-mail']; // "user@example.com"
Vous pouvez également référencer les groupes nommés dans les remplacements:
preg_replace ('/ hello (? <name> \ w) /', 'hi $ {name}', 'Bonjour Alice'); // 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 = ' \ b (? <Nearn> \ d {4}) # année [- /] (? <mois> \ d {2}) # mois [- /] (? <Day> \ d {2}) # jour / x '; preg_match ($ Pattern, 'Date: 2023-12-25', $ 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 = '/ \ ((?: [^ ()] | (? R)) * \) /'; 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 ('/ ^ \ w / u', $ 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'importe quelle lettre de n'importe quelle langue preg_match ('/ ^ \ p {l} / u', 'Café', $ 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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

TODEFENDAGAINSTXSSSANDINIFFRIMESS

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

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é.

Caractéristique à niveau le niveau

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

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.

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é.

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