我有一个我重写的网络服务。我需要能够在查询中允许连字符或短划线。 这是我的重写:
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
正如你所看到的,我在正则表达式中列出了连字符,不确定我在这里做错了什么......
答案 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;
#----------------------------------------------------------^^^^^^^^