1

给定一个 URI,如:

/2013/03%20-%20March/15%20-%20Friday/1AC37325007

我尝试了以下方法,但似乎找不到匹配项;

"/{year:\\d{4}}/{month:\\d{2}}\\s-\\s\\w+/{day:\\d{2}}\\s-\\s\\w+/{id:\\w{11}}"

不匹配的是monthandday表达式,因为当我更改它们以捕获/它匹配之间的所有内容时{month}/{day}/,等等。但我只需要提取数字部分,因此这不是一个优雅的解决方案。

我认为这是让我绊倒的空白,我无法让它匹配%20,我也无法让它匹配\s

4

2 回答 2

1

这是我通过反复试验得到的结果:

@Path("/{year:\\d{4}}/{month:\\d{2}}{noop0:%20-%20\\w+}/{day:\\d{2}}{noop1:%20-%20\\w+}/{id:\\w{11}}")

请注意,即使您不打算使用分组结果,也必须包含所有正则表达式表达式。{ }

我命名了我的noop0并将noop1它们标记为no operation操作。

此外,正则表达式匹配似乎是预先解码完成的,然后对匹配结果进行 URL 解码。

于 2013-05-28T23:36:00.747 回答
-1

语法 like{year:\\d{4}}是非法的重复:

Pattern p = Pattern.compile("{date:\\d}");

给出:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition
{date:\d}
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.closure(Pattern.java:2775)

尝试\\d{4}改用。

除非您事先对字符串执行 URL 解码,否则也\\s-\\s不会匹配%20-%20

您可以用括号将表达式的一部分括起来,然后仅捕获该部分

于 2013-05-28T23:13:08.493 回答