捕获排除两个文字的正则表达式
Capturing regexp which excludes two literals
在 Spring 控制器中,我想要一个 updateuser
端点、一个 deleteuser
端点和一个捕获其余选项的通用端点:
@PostMapping(value = "/{action:^((?!(updateuser|deleteuser)).)+}")
// Do something depending on `action`, need to capture the match
@PostMapping(value = "/updateuser")
// Update user
@PostMapping(value = "/deleteuser")
// Delete user
使用正则表达式抛出:
The number of capturing groups in the pattern segment
(^((?!updateuser|deleteuser).)*) 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.
我用@PostMapping(value = "/{action:^.*(?!updateuser)}")
没问题
哪个是正确的正则表达式?
您可以排除 updateuser 和 deleteuser,方法是在没有捕获组的情况下使用单个否定前瞻,而不是使用 匹配单个字符后跟断言的方法。
^(?!.*(?:update|delete)user).+$
如果应该更严格,可以使用单词边界来防止部分单词匹配:
^(?!.*\b(?:update|delete)user\b).+$
看到一个regex demo。
在 Spring 控制器中,我想要一个 updateuser
端点、一个 deleteuser
端点和一个捕获其余选项的通用端点:
@PostMapping(value = "/{action:^((?!(updateuser|deleteuser)).)+}")
// Do something depending on `action`, need to capture the match
@PostMapping(value = "/updateuser")
// Update user
@PostMapping(value = "/deleteuser")
// Delete user
使用正则表达式抛出:
The number of capturing groups in the pattern segment (^((?!updateuser|deleteuser).)*) 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.
我用@PostMapping(value = "/{action:^.*(?!updateuser)}")
哪个是正确的正则表达式?
您可以排除 updateuser 和 deleteuser,方法是在没有捕获组的情况下使用单个否定前瞻,而不是使用
^(?!.*(?:update|delete)user).+$
如果应该更严格,可以使用单词边界来防止部分单词匹配:
^(?!.*\b(?:update|delete)user\b).+$
看到一个regex demo。