par
Berzemus » 26 sept. 2007, 13:39
Salut,
Ton pote Regex, il est un peu froid au premier abord, mais il a des mains d'or:
Si tu veux simplement le chiffre 1 (et non 1 chiffre, genre 4 ou 5), ceci doit faire l'affaire:
En gros, ce regex trouve uniquement des chiffres 1 qui ne sont pas entourés d'autres chiffres (dans ton exemple, soit des virgules (,), soit rien)
On aurait pu éviter le lookahead et le lookbehind en simplifiant:" \D1\D ", mais alors les éléments jouxtants seraient retournés aussi, a moins d'utiliser une parenthèse capturante " \D(1)\D ", mais pourquoi se compliquer la vie ?
Dans le cas ou tu ne veux qu'un chiffre simple (en dessous de 10), il suffit de remplacer le 1:
voilà.
edit: petite explication, tant qu'a faire:
en regex, \d signifie simplement un chiffre, n'importe lequel. (pour les lettres c'est \w).
Et si tu le mets en majuscule (\D), ben c'est tout sauf un chiffre.
Les lookahead et lookbehind servent a regarder ce qu'il y a avant ou après l'élément.
" (?<=\D) " vérifie que l'élement est précédé par tout sauf un chiffre. le contraire serait " (?<!\D) ", qui chercherait tout sauf ce qui n'est pas un chiffre, ce qui revient à " (?<=\d) ", si tu as bien suivi.
Salut,
Ton pote Regex, il est un peu froid au premier abord, mais il a des mains d'or:
Si tu veux simplement le chiffre 1 (et non 1 chiffre, genre 4 ou 5), ceci doit faire l'affaire:
[code](?<=\D)1(?=\D)[/code]
En gros, ce regex trouve uniquement des chiffres 1 qui ne sont pas entourés d'autres chiffres (dans ton exemple, soit des virgules (,), soit rien)
On aurait pu éviter le lookahead et le lookbehind en simplifiant:" \D1\D ", mais alors les éléments jouxtants seraient retournés aussi, a moins d'utiliser une parenthèse capturante " \D(1)\D ", mais pourquoi se compliquer la vie ?
Dans le cas ou tu ne veux qu'un chiffre simple (en dessous de 10), il suffit de remplacer le 1:
[code](?<=\D)\d(?=\D)[/code]
voilà.
[u]edit:[/u] petite explication, tant qu'a faire:
en regex, \d signifie simplement un chiffre, n'importe lequel. (pour les lettres c'est \w).
Et si tu le mets en majuscule (\D), ben c'est tout sauf un chiffre.
Les lookahead et lookbehind servent a regarder ce qu'il y a avant ou après l'élément.
" (?<=\D) " vérifie que l'élement est précédé par tout sauf un chiffre. le contraire serait " (?<!\D) ", qui chercherait tout sauf ce qui n'est pas un chiffre, ce qui revient à " (?<=\d) ", si tu as bien suivi.