我正在尝试匹配字符串v1
和v2
.为此,我正在尝试以下正则表达式:( ^v(1|2)
我也尝试过,$
这可能是我需要的).当我在http://www.regextester.com/上测试它时,似乎工作正常.但是当我在JAX-RS路径表达式中使用它时,它不起作用.我使用的表达式如下:
@Path("/blah/{ver:^v(1|2)}/ep")
JAX-RS是否有任何我特有的缺失?
由于锚点,您的尝试无效^
.引用JAX-RS规范,第3.7.3章(强调我的):
该函数
R(A)
将URI路径模板注释A
转换为正则表达式,如下所示:
URI对模板进行编码,忽略URI模板变量规范.
转义URI模板中的所有正则表达式字符,再次忽略URI模板变量规范.
将每个URI模板变量替换为包含指定正则表达式的捕获组,或者
‘([ˆ/]+?)’
如果未指定正则表达式.如果结果字符串结束,
‘/’
则删除最后一个字符.附加
‘(/.*)?’
到结果.
因为每个URI模板都放在捕获组中,所以不能在其中嵌入锚点.
因此,以下内容将起作用并将匹配v1
或v2
:
@Path("/blah/{ver:v[12]}/ep")