Bonjour,
Pourriez-vous, svp, m'expliquer les différences entre ces trois expressions:
(?<!\d)
/(?<=[lmn])
(?!\d)
Merci
Cordialement
Bonjour,
Pourriez-vous, svp, m'expliquer les différences entre ces trois expressions:
(?<!\d)
/(?<=[lmn])
(?!\d)
Merci
Cordialement
Je ne sais pas s'il est pertinent de parler de différence dans la mesure où ces expressions n'ont rien en commun, je vais néanmoins détailler le sens:
- (?<!\d): "La position courante ne doit pas être précédée d'un chiffre." (?<!...) est un test arrière négatif (negative lookbehind) qui signifie "non précédé de" et \d est un classe de caractères pour les chiffres.
- /(?<=[lmn]): Cette expression est quasiment dénuée de sens car elle décrit: un slash puis à la position suivante (donc après le slash) l'assertion "la position courante doit être précédée par une des lettres l, m ou n". Cette pattern échouera donc toujours puisque un slash ne peut pas être à la fois une de ces lettres. (?<=...) est un test arrière (lookbehind) qui signifie "précédé de".
- (?!\d): "La position courante ne doit pas être suivie par un chiffre." (?!...) est un test avant négatif (negative lookahead) et signifie "suivi de".
Tous les tests qu'ils soient avants, arrières, négatifs ou pas, ne consomment pas de caractères, ce sont de simples assertions.
Tu trouveras des informations plus complètes en consultant cette page ou en tapant perldoc perlre dans un terminal.
Partager