我正在尝试匹配字符串v1和v2.为此,我正在尝试以下正则表达式:^ v(1 | 2)(我也尝试过$,这可能是我需要的).当我在http://www.regextester.com/测试它时,似乎工作正常.但是当我在JAX-RS路径表达式中使用它时,它不起作用.我使用的表达式如下:
@Path( “/嗒嗒/ {版本:^ V(1 | 2)} / EP”)
JAX-RS是否有任何我特有的缺失?
解决方法:
由于锚点^,您的尝试无效.引自JAX-RS specification, chapter 3.7.3(强调我的):
The function
R(A)
converts a URI path template annotationA
into a regular expression as follows:
- URI encode the template, ignoring URI template variable specifications.
- Escape any regular expression characters in the URI template, again ignoring URI template variable specifications.
- Replace each URI template variable with a capturing group containing the specified regular expression or
‘([ˆ/]+?)’
if no regular expression is specified.- If the resulting string ends with
‘/’
then remove the final character.- Append
‘(/.*)?’
to the result.
由于每个URI模板都放在捕获组中,因此无法在其中嵌入锚点.
因此,以下内容将起作用并将匹配v1或v2:
@Path("/blah/{ver:v[12]}/ep")