J'ai besoin de rechercher tous les numéros avec 4 chiffres compris entre 2000 et 3000. P>
Ce peut être que les lettres sont avant et après. P>
Je pensais pouvoir utiliser merci. p> [2000-3000] {4} code>, mais ne fonctionne pas, pourquoi? P>
6 Réponses :
humidité difficile. Le tableau de bord - s'applique uniquement au personnage immédiatement avant et après, ce que votre regex correspondait réellement à 4 caractères entre 0 et 3 inclus (c.-à-d. 0, 1, 2 et 3). Par exemple, 3210, 1230, 3333, etc ... Essayez l'expression ci-dessous. P>
(2 [0-9] {3}) | (3000) code> p>
Que diriez-vous de
(?<![0-9])(?:2[0-9]{3}|3000)(?![0-9])
+1 Bien que je pense que les marqueurs de début / fin ne sont pas vraiment nécessaires car nous allons capturer tous les chiffres.
Est \ d code> garanti pour correspondre juste [0-9] code> ou dépend-il de la locale?
12000 code> ne doit pas correspondre comme 2000 code>, n'est-ce pas?
Ajoutez une limite de mot \ b code> au lieu de ^ code> et $ code> @ su.mark l'avez-vous fait CW de rester à 10k pour toujours?
Qui correspond 13000 code> aussi (ou A3000 code>). It mathces ^ 2 \ d {3} code> ou 3000 $ code>: vous devez ajouter une parenthèse.
@Amarghosh, pour aujourd'hui au moins. :RÉ
@ S.Mark Apparemment, vous êtes en sécurité pour la journée de toute façon - j'ai essayé de gâcher vos plans en votant sur un autre message, mais vous semblez avoir frappé le rep-capuchon;) Vous obtiendriez un badge de réponse agréable.
Maintenant, j'ai changé en (?:: 3 [0-9] {3} | 10000), pour obtenir tout entre 3000 et 10000, il ne trouvera pas 4000.
Ce serait (?: [3-9] [0-9] {3} | 10000) Code>
@ Su.mark, de la question ", il peut s'agir de ces lettres avant et après"
Cela fonctionne pour ma solution maintenant, mais je devais enlever le?: Qu'est-ce que cela signifie "?:"?, Merci à tous.
@snarebold ?: code> fait un groupe entre parenthèses non capturant. Considérez la chaîne "abbbcccd" code> et regregs a (b +) (C +) d code> et A (?: B +) (C +) d code>. Les résultats correspondants de la première regex contiendront BBB code> dans le premier groupe et CCC code> au deuxième groupe. Les résultats de Deuxième regex contiendront CCC code> dans son premier groupe (et seulement) groupe comme (b +) code> groupe ont été fabriqués sans capture en utilisant ?: Code> Voir régulier-expressions.info/brackets.html pour plus d'informations.
Veuillez jeter un oeil ici MSDN.Microsoft.com/fr- US / Bibliothèque / 1400241x (vs.85) .aspx et rechercher (? Modèle) code>
Il est expliqué pourquoi et façons de détecter les gammes: http: //www.regular-expressions. info / numericranges.html p>
Corriger regex sera \ b (2 \ d {3} | 3000) \ b code>. Cela signifie: Match Caractère '2' puis trois chiffres (cela correspondra à partir de 2000 à 2999) ou de correspondre simplement à "3000". Il existe de bons tutoriels sur des expressions régulières: p>
Pourquoi ne vérifiez-vous pas plus ou moins que? sa plus simple qu'une regex
Les expressions régulières sont rarement adaptés pour le contrôle de gammes depuis pour les plages comme 27 à 9076 inclus, ils deviennent incroyablement laid. Il peut em> être fait, mais vous êtes vraiment mieux faire juste une expression régulière pour vérifier les valeurs numériques, quelque chose comme: ^2[7-9]|[3-9][9-9]|[1-9][0-9]{2}|[1-8][0-9]{3}|90[0-6][0-9]|907[0-6]$
Au lieu d'expliquer pourquoi cela ne fonctionne pas, je vous demande: comment espérez-vous exactement que cela fonctionne? Et quelle règle de regex vous attendez-vous à déclencher ce comportement?