Regex : rechercher l'absence d'une sous-chaîne au sein d'une chaîne de caractères
07 mai 2017
On peut utiliser le negative lookahead, ou le negative lookbehind. Voir : http://www.regular-expressions.info/lookaround.html
Le negative lookahead permet de contrôler si une chaîne de caractère n'en suit pas une autre. On regarde devant.
Le negative lookbehind permet de contrôler si une chaîne de caractères n'en précède pas une autre. On regarde derrière.
Exemple d'utilisation de negative lookahead :
La syntaxe de base est la suivante : jeveux(?!jeneveuxpas)
Rechercher toutes les chaînes commençant par <?
sans être suivies de php
, que j'ai utilisé pour débusquer ce raccourci dans de vieux projets. Pour rappel, le raccourci <?
ne fonctionne que si l'option short_open_tag est activée dans php.ini. Je souhaite les remplacer par le tag complet <?php
.
<?(?!php)
Retourne tous les tags <?
non suivis de php
.
<?(?!php|xml|=)
Retourne tous les tags <?
non suivis de php
, xml
ou =
, toutes les versions de php décemment récentes (> 5.4) supportant par défaut <?=
comme raccourci pour <?php echo
, je suis ok pour les conserver tels quels.
Exemple d'utilisation de negative lookbehind
La syntaxe de base est la suivante : (?<!jeneveuxpas)jeveux
Je veux toutes les chaînes function
non précédées de private
, protected
ou static
, avec au moins une espace précédant function
.
(?<!public|protected|static)s+function
Sites utiles
- La base pour tester vos expressions régulières en live : https://regex101.com
- La documentation complète... velue, certes, mais indispensable : http://www.regular-expressions.info