Can't map regular expression - java.lang.IllegalArgumentException: The number of capturing groups in the pattern segment

java, regex, spring-mvc

Solution

Everything is said in the error message: `use non-capturing groups instead`

(?:[apv]|ad)\\d+

See http://www.regular-expressions.info/brackets.html for further details.

Problem

I have the following method defined in my controller: ``` @RequestMapping(value = "/ajax/comments/post/{contentId:([apv]|ad)\\d+}") public @ResponseBody ActionResult handlePostCommentRequest(HttpServletRequest request, Model model, @PathVariable("contentId") String assetId, @RequestParam(value = "nickName", required = false, defaultValue = "Anonyymi") String nickName, @RequestParam(value = "text", required = false, defaultValue = "") String text, @RequestParam(value = "createThread", required = false, defaultValue = "false") String createThread) { // some code... } ``` However, when I do the following HTTP request - /ajax/comments/post/ad1374659405664 I get exception: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: The number of capturing groups in the pattern segment (([apv]|ad)\d+) does not match the number of URI template variables it defines, which can occur if capturing groups are used in a URI template regex. Use non-capturing groups instead. Google doesn't give that much results and it is weird, because when I check the regex `([vpa]|ad)\d+` in http://regexpal.com/ it matches everything correctly. What am I doing wrong?

Original source