如果我举例,这可能是最简单的......
我输入的数据如下:
/foo/blah/something/this
有些看起来像这样:
/foo/blah/this
我需要一个与后者匹配的正则表达式而不是前者。
换句话说:
/foo/*/this
应匹配/foo/*/*/this
不匹配"富"是一个静态值,意味着它总是" foo"和"这个"是一样的。 ' blah'和'东西'代表可能是任何东西的变量。
因此,我的正则表达式应该匹配以下字符串:
/foo/john/jones
/foo/james/jones
/foo/steven/jones
/foo/samantha/jones
但以下字符串不匹配:
/foo/john/paul/jones
/foo/james/earl/jones
/foo/steven/james/jones
/foo/samantha/wilson/jones
任何帮助?
答案 0 :(得分:1)
^/foo/[^/]+/[^/]+$
如果您希望[^/]+
之类的内容也能正常运行,则可以将[^/]*
替换为/foo//jones
。
答案 1 :(得分:1)
您可以使用正则表达式以及字符串类的matches
方法来匹配字符串:
<强>样品:强>
String[] s = {"/foo/john/jones", "/foo/james/jones", "/foo/john/paul/jones", "/foo/james/earl/jones"};
for(String s2 : s)
System.out.println(s2.matches("/foo/([^/]+)/jones"));
<强>结果:强>
true
true
false
false
答案 2 :(得分:0)
您可以使用此正则表达式:
^/\w+/\w+/\w+$
<强> Working demo 强>
感谢Pshemo的评论。我忘了提到对于java你需要转义反斜杠而且/
不需要转义。
所以,java正则表达式将是:
^/\\w+/\\w+/\\w+$
顺便说一句,一个不错的Pschemo观察是,如果你有/foo
作为静态值。你可以使用这个正则表达式:
^/foo/\\w+/\\w+$
答案 3 :(得分:0)
您也可以在没有正则表达式的情况下执行此操作:
public boolean isValid(String expression) {
if (!expression.startsWith("/foo/") {
return false;
}
String[] parts = expression.split("/");
// note: four including the empty string before the first slash
return parts.length == 4;
}