在java中使用regex忽略url中的参数

时间:2017-09-30 01:50:09

标签: java regex

所以我有以下路由/ path1 / path2 / {value1} / path3 / {value2},我试图弄清楚请求路由是否匹配path1 path2和path3,而不管{value1}和{value2哪个改变了。

这就是我所拥有的,但它不匹配:

    @Test
public void testURLMatches() {
    String input = "/path1/path2/123/path3/456";
    Pattern pattern = Pattern.compile("\\/path1\\/path2\\/([a-zA-Z0-9]{0,})\\/path3\\/([a-zA-Z0-9]{0,})");
    Matcher matcher = pattern.matcher(input);
    if (matcher.find()) {
        System.out.println("Does match!");
    } else {
        System.out.println("Does not match!");
    }
    assertTrue(matcher.find());
}

编辑1: 添加在最初缺少的模式\ /

2 个答案:

答案 0 :(得分:3)

我认为你正在看的正则表达式是

^\/path1\/path2\/([\w]+)\/path3\/([\w]+)$

PS:你的测试中有另一个问题,你调用matcher.find()函数两次,而你应该只调用一次。删除if条件。

在Java中,你得到

@Test
public void testURLMatches() {
    String input = "/path1/path2/123/path3/456";
    Pattern pattern = Pattern.compile("^\\/path1\\/path2\\/([\\w]+)\\/path3\\/([\\w]+)$");
    Matcher matcher = pattern.matcher(input);
    assertTrue(matcher.find());
}

example

答案 1 :(得分:1)

你的模式不匹配,因为你需要一个/ after:/ path2,尝试这个并且它会起作用:

string input = "/path1/path2/123/path3/456";
string pattern = @"\/path1\/path2\/[a-zA-Z0-9]{0,}\/path3\/[a-zA-Z0-9]{0,}";

Match m = Regex.Match(input, pattern, RegexOptions.IgnoreCase);
if (m.Success)
{
    // match
}
else
{
    // not match
}

我不太清楚{Value}的可接受值是什么,但您也可以使用它:

\/path1\/path2\/[\w]*\/path3\/[\w]*

[\ w] *:零或多次出现任何字母数字字符