我正在尝试匹配字符串v1
和v2
。为此,我正在尝试以下正则表达式:^v(1|2)
(我也试过$
,这可能就是我需要的)。当我在http://www.regextester.com/中测试它时,似乎工作正常。但是当我在JAX-RS路径表达中使用它时,它不起作用。我使用的表达式如下:
@Path("/blah/{ver:^v(1|2)}/ep")
我缺少JAX-RS特有的东西吗?
答案 0 :(得分:5)
由于锚^
,您的尝试无效。引自JAX-RS specification, chapter 3.7.3(强调我的):
函数
R(A)
将URI路径模板注释A
转换为正则表达式,如下所示:
- URI对模板进行编码,忽略URI模板变量规范。
- 转义URI模板中的所有正则表达式字符,再次忽略URI模板变量规范。
- 如果未指定正则表达式,则将每个URI模板变量替换为包含指定正则表达式的捕获组或
‘([ˆ/]+?)’
。- 如果结果字符串以
‘/’
结尾,则删除最后一个字符。- 将
醇>‘(/.*)?’
附加到结果中。
由于每个URI模板都放在捕获组中,因此您无法在其中嵌入锚点。
因此,以下内容将有效,并将与v1
或v2
匹配:
@Path("/blah/{ver:v[12]}/ep")
答案 1 :(得分:1)
尝试以下(没有锚点):
@Path("/blah/{ver : v(1|2)}/ep")
此外,如果更改只是单个字符,请使用字符集而不是|
运算符:
@Path("/blah/{ver : v[12]}/ep")