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

时间:2016-12-20 16:22:55

标签: regex rest jpa pattern-matching matcher

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

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测试方法时,它返回null。为什么我对模式匹配做错了?

2 个答案:

答案 0 :(得分:2)

我得到了这个:(\ w +?)(:|&lt; |&gt;)[a-zA-Z0-9 \ - ] *,

我用它来解决这个问题:https://regex101.com/r/fOEzd9/1

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

答案 1 :(得分:0)

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

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