REGEX重写问题允许连字符

时间:2012-01-16 15:21:45

标签: regex rewrite

我有一个我重写的网络服务。我需要能够在查询中允许连字符或短划线。 这是我的重写:

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 个答案:

答案 0 :(得分:3)

您应该将连字符放在上一组中:

([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 :(得分:1)

我认为你错位了破折号。它应该是这样的

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

请注意,“ - ”已从“/”后移到内部括号中。如果破折号是方括号内的最后一个字符,则标记一系列字符没有特殊含义(如a-z中所示)。

答案 2 :(得分:0)

只需在-字符类末尾的([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;
#----------------------------------------------------------^^^^^^^^