Qu'est-ce qu'un "Quantifier imbriqué" et pourquoi cause-t-il l'échec de mon regex?
J'ai cette regex que j'ai construit et testé en regex copain.
"_ [ 0-9]{10}+ {1}+[ 0-9]{10}+ {2}+[ 0-9]{6}+ {2}[ 0-9]{2}"
Quand je l'utilise .Net C#
Je reçois l'exception
"parsing \"_ [ 0-9]{10}+ +[ 0-9]{10}+ +[ 0-9]{6}+ [ 0-9]{2}\" - Nested quantifier +."
Que fait cette erreur signifie? Apparemment .net n'aime pas l'expression.
Voici la regex copain alors u peut comprendre mon intention avec les regex...
_ [ 0-9]{10}+ {1}+[ 0-9]{10}+ {2}+[ 0-9]{6}+ {2}[ 0-9]{2}
Match the characters "_ " literally «_ »
Match a single character present in the list below «[ 0-9]{10}+»
Exactly 10 times «{10}+»
The character " " « »
A character in the range between "0" and "9" «0-9»
Match the character " " literally « {1}+»
Exactly 1 times «{1}+»
Match a single character present in the list below «[ 0-9]{10}+»
Exactly 10 times «{10}+»
The character " " « »
A character in the range between "0" and "9" «0-9»
Match the character " " literally « {2}+»
Exactly 2 times «{2}+»
Match a single character present in the list below «[ 0-9]{6}+»
Exactly 6 times «{6}+»
The character " " « »
A character in the range between "0" and "9" «0-9»
Match the character " " literally « {2}»
Exactly 2 times «{2}»
Match a single character present in the list below «[ 0-9]{2}»
Exactly 2 times «{2}»
The character " " « »
A character in the range between "0" and "9" «0-9»
En bref...
Qu'est ce qu'un quantificateur Imbriqué?
source d'informationauteur ctrlShiftBryan
Vous devez vous connecter pour publier un commentaire.
.NET est de se plaindre de la
+
après la{n}
style quantificateur comme il n'a pas de sens.{n}
moyens qui correspondent exactement à la n d'un groupe donné.+
signifie correspondre à un ou plus d'un groupe donné. Supprimer la+
's et il va compiler amende..NET ne prend pas en charge la possessif quantificateur
Toutefois, {10} devriez avoir exactement le même effet. Le + évite les retours en arrière et d'essayer plus courte correspond à si la plus longue correspondance échoue, mais, depuis {10} ne peut correspondre exactement à 10 caractères pour commencer ce n'est pas obtenir beaucoup de résultats.
doit être fine. J'ai aussi abandonné le "{1}+".Car il correspond exactement à la fois, "Un{1}+" est équivalent à "Une".
MODIFIER
Comme Porges dit, si vous avez besoin d'possessif des quantificateurs .NET, alors atomique groupes offrent la même fonctionnalité avec
(>[0-9]*)
équivalent à[0-9]*+
.Qu'ils ont raison. Cette version de votre regex n'est pas en panne:
(_ [ 0-9]{10})+(\s{1})+([ 0-9]{10})+(\s{2})+([ 0-9]{6})+\s{2}[ 0-9]{2}
Notez l'utilisation de parenthèses pour créer des groupes qui peuvent ensuite répéter une ou plusieurs fois. Aussi, vous devriez être plus précis et utilisez \s au lieu d'un espace, comme modèle les espaces peuvent ou peuvent ne pas avoir une signification.
BTW, cette expression n'a pas l'air tout ce qui utile. Vous voudrez peut-être poser une autre question, le long des lignes de "Comment puis-je utiliser les regex pour correspondre à ce schéma?"
Si vous sélectionnez l' .NET saveur dans la barre d'outils en haut dans RegexBuddy, RegexBuddy indique que .NET ne prend pas en charge les quantificateurs possessifs tels que {10}+.
Depuis {10} permet uniquement pour un nombre de répétitions, le rendant paresseux ou possessif est inutile, même si elle est syntaxiquement valide dans la regex saveurs qui prennent en charge paresseux et/ou possessif des quantificateurs. En supprimant les signes + à partir de votre regex va faire le travail très bien avec .NET.
Dans d'autres situations, double-cliquez sur l'erreur sur le possessif quantificateur dans l'onglet Créer, dans RegexBuddy. RegexBuddy va ensuite remplacer le possessif quantificateur avec une fonctionnellement équivalent atomique groupe.
Si vous générez un code source extrait de pour un .NET de la langue sur l'Utilisation de l'onglet dans RegexBuddy, RegexBuddy remplacera automatiquement le possessif des quantificateurs dans la regex dans la source de l'extrait de code.