Мои (действительные?) Регулярные выражения не работают в гориллах / муксах

У меня есть это регулярное выражение в моем коде:

get.HandleFunc("/my/api/user/{userID:^([1-9][0-9]*)$}", app.Handle("user"))

Но когда я запускаю тесты, возвращаются только 404. Я также попробовал это:

get.HandleFunc("/my/api/user/{userID:\\A([1-9][0-9]*)\\z}", app.Handle("user"))

Он отлично работал с моим старым (но неверным) регулярным выражением:

get.HandleFunc("/my/api/user/{userID:[0-9]{1,}}", app.Handle("user"))

Интересно, что не так с моим новым регулярным выражением? Я пытался проверить это на некоторых сайтах, а также с помощью regexp Пакет в Go, и он всегда работал. Насколько я знаю, gorilla/mux использует Го regexp пакет. Любая идея?

Я хочу обнаружить положительные целые числа, исключая ноль.

2 ответа

Решение

Якоря, скорее всего, проблема здесь, вы пытаетесь утверждать в начале / конце позиции строки.

Я бы просто попытался изменить старое (рабочее) регулярное выражение следующим образом:

get.HandleFunc("/my/api/user/{userID:[1-9][0-9]*}", app.Handle("user"))

Если вы хотите обнаружить положительные целые числа, исключая 0, вы должны использовать этот класс символов: [1-9]\d*

Это означает, что первая цифра должна быть между 1 и 9. Другие цифры (если они есть, посмотрите на *) может быть любым целым числом, включая 0.

Другие вопросы по тегам