REGEX переписать вопрос, чтобы разрешить дефис - PullRequest
1 голос
/ 16 января 2012

У меня есть веб-сервис, который я переписал.Мне нужно разрешить дефис или тире в запросе.Вот мое переписывание:

rewrite ^/app/api/sanction/([0-9]+)/athleteList/([a-zA-Z0-9,]+)/-([0-9,]+)$ /app/athleteList.phtml?s=$1&l=$2&c=$3 last;

Запрос работает нормально так:

/app/api/sanction/35172/athleteList/MLEVEL07/25001,24450

Однако, когда я ставлю здесь тире или дефис, запрос завершится неудачей.

/app/api/sanction/35172/athleteList/MLEVEL-07/25001,24450

Как видите, в регулярном выражении указан дефис, неуверенный в том, что я могу ошибаться здесь ...

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Вы должны поместить дефис в предыдущую группу:

([a-zA-Z0-9,-]+)/([0-9,]+)

Это, однако, будет соответствовать "--- 1020 -, - 02-1-", и я не уверен, что этото, что ты хочешь.Отсюда мое первое предложение, исправленное сейчас:

([a-zA-Z0-9,]+)(-([0-9]+))?/-([0-9,]+)

Это будет соответствовать только "weofhw234fhweo, sdfsff3284982-20423400", а не "-, j2j, f9223-2-3402--0d-f0s-f"

1 голос
/ 16 января 2012

Я думаю, вы не на месте.Это должно быть так

rewrite ^/app/api/sanction/([0-9]+)/athleteList/([a-zA-Z0-9,-]+)/([0-9,]+)$ /app/athleteList.phtml?s=$1&l=$2&c=$3 last;

Обратите внимание, что "-" был перемещен из "/" во внутренние скобки.Если тире является последним символом в квадратных скобках, он не имеет специального значения для обозначения диапазона символов (как в аз).

0 голосов
/ 16 января 2012

Просто добавьте - внутри ([a-zA-Z0-9,-]+) в конце класса символов [] и удалите дефис после следующего /:

rewrite ^/app/api/sanction/([0-9]+)/athleteList/([a-zA-Z0-9,-]+)/([0-9,]+)$ /app/athleteList.phtml?s=$1&l=$2&c=$3 last;
#----------------------------------------------------------^^^^^^^^
...