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
转换为正则表达式,如下所示:

  • URI对模板进行编码,忽略URI模板变量规范
  • 转义URI模板中的任何正则表达式字符,再次忽略URI模板变量规范
  • 使用包含指定正则表达式的捕获组替换每个URI模板变量
    '([ˆ/]+?)
    (如果未指定正则表达式)
  • 如果结果字符串以
    '/'
    结尾,则删除最后一个字符
  • “(/.*)”
    附加到结果中
  • 因为每个URI模板都放在一个捕获组中,所以不能在其中嵌入锚

    因此,以下各项将起作用并与
    v1
    v2
    匹配:

    @Path("/blah/{ver:v[12]}/ep")
    

    没有提到任何关于冒号周围的空格,所以这要么破坏模板解析,要么什么也不做。是的。这很有效。为什么锚不起作用?你能解释一下吗?需要在冒号周围留出空间是一件容易的事情(因为其中有一个bug)。模板模式示例不使用锚(即,
    ^
    $
    ),因此我猜它们不应该被使用。无论它们是否是您问题的原因,我不能确定(而且我没有可以测试它的服务器)。@VGR我只是深入研究了规范,URI模板被放置在一个捕获组(3.7.3)中,因此anchors@Tunaki的确如此。问题中出现的
    ^
    可能是匹配失败的原因。如果要使用锚,该怎么办?有其他选择吗?@500865为什么要使用锚?我看不出需要匹配字符串的开头或结尾。此外,如果模板中没有正则表达式,则变量将替换为表达式“([^/]+?”,其中包含一个锚。@500865不,它位于一个组内(即
    []
    ),因此它表示“不/”。这不是一个锚(相同的字符,但不同的含义)。
    @Path("/blah/{ver:v[12]}/ep")