Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
Les assertions... moins simple ! (Partie II)
Pour rappel, les motifs sont réalisés au moyen de symboles spécifiques =>[ Symboles ]
Le vrai visage de l'assertion !
Comme vous avez pu le constater dans la partie 1 de ce tuto sur les assertions simples, l'assertion \b ou limite de mot \b ne consomme pas de caractère.On peut donc considérer une assertion simple comme un pointeur qui se trouverait, non pas sur un caractère ou un autre, mais juste entre les deux.
Ce qui en clair signifie que l'assertion simple ne cherche pas à trouver une concordance mais bien à vérifier une position.
Nous allons travailler maintenant avec les assertions proprement dite.
Comme pour les assertions simples, elles se positionnent à un certain endroit et analysent les caractères suivants ou précédents. (lookahead et lookbehind)
/!\ Vous vous souvenez sûrement que j'ai dit de ne pas utiliser le ! comme délimiteur
des PCRE parce qu'il était utilisé dans les assertions.
Vous y êtes là, regardez !
Les assertions sont au nombre de 4 :
| Type | Motif | Résultat |
| Assertion avant positive | (?=motif) | Vrai si le motif est vérifié |
| Assertion avant negative | (?!motif) | Vrai si le motif échoue |
| Assertion arrière positive | (?<=motif) | Vrai si le motif est vérifié |
| Assertion arrière négative | (?<!motif) | Vrai si le motif échoue |
Assertion avant => lookahead => déplace le pointeur vers l'avant.
Assertion arrière => lookbehind => déplace le pointeur vers l'arrière.
C'est parti, on va mettre ça en pratique ce sera mieux !
Cela faisait bien longtemps que je vous parlais de l'assertion et de l'emploi de ! comme délimiteur de regex PCRE. Vous ne saviez pas pourquoi et à de multiples reprises vous m'avez demandé de faire un article afin de définir correctement le problème du délimiteur de regex.
Exemple d'une assertion arrière négative :
<?php$texte = 'exemple de texte avec des noms des surnoms et des prenoms';
preg_match('#((?<!pre)noms)#', $texte);
L'exemple suivant va matcher ceci : exemple de texte avec des noms des surnoms et des prenoms
