47 votes

Expression régulière pour faire correspondre le dernier nombre d'une chaîne

J'ai besoin d'extraire le dernier nombre qui se trouve à l'intérieur d'une chaîne. J'essaie de le faire avec des expressions régulières et des prévisions négatives, mais cela ne fonctionne pas. Voici la regex que j'ai :

 \d+(?!\d+)

Et voici quelques chaînes, juste pour vous donner une idée, et à quoi doit correspondre l'expression régulière :

 ARRAY[123]         matches 123 
ARRAY[123].ITEM[4] matches 4
B:1000             matches 1000
B:1000.10          matches 10

Etc. L'expression régulière correspond aux nombres, mais à tous. Je ne comprends pas pourquoi la prévision négative ne fonctionne pas. Quelqu'un veut-il m'expliquer ?

120voto

codaddict Points 154968

Votre regex \d+(?!\d+) dit

correspondre à n'importe quel nombre s'il n'est pas immédiatement suivi d'un nombre.

ce qui est incorrect. Un numéro est le dernier s'il n'est pas suivi (en le suivant n'importe où, pas seulement immédiatement) par un autre numéro.

Une fois traduit en regex, nous avons :

 (\d+)(?!.*\d)

Lien rubulaire

0voto

Elysiumplain Points 337

J'ai toujours eu des problèmes avec la gestion des groupes de capture (par exemple, si vous utilisez Inline Modifiers (?imsxXU) ).

Cela a fonctionné pour mes besoins -

. (?:\D|^)\d (\D)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X