为什么这个正则表达式模式匹配不起作用

Why this regex pattern matching does not work

我正在使用 JPA 规范实现 RESTful 查询。想要使用如下所示的多个条件来处理 url:

http://localhost:8080/samples?search=lastName:doe,age>25

搜索字符串将匹配 (\w+?)(:|<|>)(\w+?) 以“,”分隔的模式。

因此,我写了下面的代码来从一个字符串中获取Matcher:

static Matcher getMatcherFromString(String str) {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    Pattern pattern = Pattern.compile("(\w+?)(:|<|>)(\w+?),");
    Matcher matcher = pattern.matcher(str + ",");
    return matcher;
}

然后在控制器中调用此方法来解析url。

然而,当我用字符串 analysisId:fdebfd6e-d046-4192-8b97-ac9f65dc2009 测试该方法时,它 returns 为空。为什么我的模式匹配错了?

我让这个工作:(\w+?)(:|<|>)[a-zA-Z0-9\-]*,

我用这个来弄明白:https://regex101.com/r/fOEzd9/1

我认为主要问题是数字使 \w 不能作为单词匹配。您还需要考虑破折号。

我有同样的问题,我用这个字符串解决了:

"(\w+?)(:|<|>)(\w+?),"