Java 简单字符串的JAX-RS/Jersey路径参数regex
我正在尝试匹配字符串Java 简单字符串的JAX-RS/Jersey路径参数regex,java,regex,jersey,jax-rs,Java,Regex,Jersey,Jax Rs,我正在尝试匹配字符串v1和v2。为此,我尝试了以下正则表达式:^v(1 | 2)(我还尝试了$,这可能是我所需要的)。当我测试它时,它似乎工作得很好。但当我在JAX-RS路径表达式中使用它时,它不起作用。我使用的表达方式如下: @Path(“/blah/{ver:^v(1 | 2)}/ep”) 有没有我缺少的JAX-RS特定的东西?尝试以下方法(没有锚定): 此外,如果更改仅为单个字符,请使用字符集而不是运算符: @Path("/blah/{ver : v[12]}/ep") 由于锚定^,您的
v1
和v2
。为此,我尝试了以下正则表达式:^v(1 | 2)
(我还尝试了$
,这可能是我所需要的)。当我测试它时,它似乎工作得很好。但当我在JAX-RS路径表达式中使用它时,它不起作用。我使用的表达方式如下:
@Path(“/blah/{ver:^v(1 | 2)}/ep”)
有没有我缺少的JAX-RS特定的东西?尝试以下方法(没有锚定):
此外,如果更改仅为单个字符,请使用字符集而不是
运算符:
@Path("/blah/{ver : v[12]}/ep")
由于锚定
^
,您的尝试无效。引用(重点矿山):
函数R(A)
将URI路径模板注释A
转换为正则表达式,如下所示:
'([ˆ/]+?)
(如果未指定正则表达式)'/'
结尾,则删除最后一个字符“(/.*)”
附加到结果中v1
或v2
匹配:
@Path("/blah/{ver:v[12]}/ep")
没有提到任何关于冒号周围的空格,所以这要么破坏模板解析,要么什么也不做。是的。这很有效。为什么锚不起作用?你能解释一下吗?需要在冒号周围留出空间是一件容易的事情(因为其中有一个bug)。模板模式示例不使用锚(即,
^
和$
),因此我猜它们不应该被使用。无论它们是否是您问题的原因,我不能确定(而且我没有可以测试它的服务器)。@VGR我只是深入研究了规范,URI模板被放置在一个捕获组(3.7.3)中,因此anchors@Tunaki的确如此。问题中出现的^
可能是匹配失败的原因。如果要使用锚,该怎么办?有其他选择吗?@500865为什么要使用锚?我看不出需要匹配字符串的开头或结尾。此外,如果模板中没有正则表达式,则变量将替换为表达式“([^/]+?”,其中包含一个锚。@500865不,它位于一个组内(即[]
),因此它表示“不/”。这不是一个锚(相同的字符,但不同的含义)。
@Path("/blah/{ver:v[12]}/ep")