Expression régulière - 4 chiffres à la suite, mais ne peuvent pas être tous des zéros
Je suis à la recherche d'une solution qui peut exclusivement être fait avec une expression régulière. Je sais que ce serait facile, avec des variables, des sous-chaînes, etc.
Et je suis à la recherche d'PCRE style de syntaxe regex même si je mentionne vim.
J'ai besoin d'identifier des chaînes avec 4 chiffres, et ils ne peuvent pas être tous des 0. Si les chaînes de caractères suivantes serait un match:
0001
1000
1234
0101
Et ce ne serait pas:
0000
C'est une chaîne qui va se produire à un endroit déterminé, au sein d'une grande chaîne, si ce qui compte; je ne pense pas qu'il devrait. Par exemple
xxxxxxxxxxxx0001xxxxx
xxxxxxxxxxxx1000xxxxx
xxxxxxxxxxxx1234xxxxx
xxxxxxxxxxxx0101xxxxx
xxxxxxxxxxxx0101xxxxx
xxxxxxxxxxxx0000xxxxx
source d'informationauteur user210757
Vous devez vous connecter pour publier un commentaire.
ou, plus aimablement/maintainably/sainement:
Depuis que je me suis plaint que certaines réponses ici n'étaient pas des expressions régulières, j'ai pensé que je ferais mieux de vous donner un regex réponse. C'est primitif, il y a probablement une meilleure façon, mais il fonctionne:
Ce vérifie quelque chose qui contient de 0 à 9 dans chaque emplacement, sauf une qui doit se situer dans 1-9, la prévention de 0000 à partir de la correspondance. Vous pouvez probablement écrire ce plus simple à l'aide de \d au lieu de [0-9] si votre regex analyseur prend en charge que métacaractère.
Depuis PCRE prend en charge lookarounds
\d{4}(?<!0000)
trouverez toute instance de quatre mandats consécutifs de non-zéro caractères. Le voir en action ici.Si vous devez assurez-vous que le match ne se produit que dans la position correcte de la chaîne, vous pouvez utiliser
^.{X}\d{4}(?<!0000).{Y}$
au lieu de cela, oùX
etY
sont au nombre de précédent et les caractères suivants, respectivement (12 et 5 dans votre exemple.)Juste de match pour 4 chiffres (
\d{4}
devrait le faire) et ensuite vérifier que votre match n'est pas égal à'0000'
.