所以我有以下路由/ 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: 添加在最初缺少的模式\ /
中答案 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] *:零或多次出现任何字母数字字符