Java 正则表达式与特定数量/斜杠模式的表达式匹配
这可能是最简单的,如果我只是举个例子 我的输入数据如下所示:Java 正则表达式与特定数量/斜杠模式的表达式匹配,java,regex,Java,Regex,这可能是最简单的,如果我只是举个例子 我的输入数据如下所示: /foo/blah/something/this /foo/blah/this 有些看起来像这样: /foo/blah/something/this /foo/blah/this 我需要一个正则表达式,可以匹配后者,但不能匹配前者 换言之: /foo/*/此应匹配 /foo/*/*/此应不匹配 “foo”是一个静态值,意味着它始终是“foo”,而“this”是相同的。“blah”和“something”表示可以是任何变量的
/foo/blah/something/this
/foo/blah/this
有些看起来像这样:
/foo/blah/something/this
/foo/blah/this
我需要一个正则表达式,可以匹配后者,但不能匹配前者
换言之:
应匹配/foo/*/此
应不匹配/foo/*/*/此
/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
有什么帮助吗
^/foo/[^/]+/[^/]+$
如果希望
/foo//jones
这样的东西也起作用,可以将[^/]+
替换为[^/]*
。可以使用regex进行此操作,也可以使用字符串类的匹配方法来匹配字符串:
示例:
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
结果:
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
您可以使用此正则表达式:
^/\w+/\w+/\w+$
^/foo/\\w+/\\w+$
谢谢Pshemo的评论。我忘了提到java需要转义反斜杠,/
不需要转义
因此,java正则表达式应该是:
^/\\w+/\\w+/\\w+$
顺便说一下,一个很好的Pschemo观察结果是,如果您将/foo
作为静态值。您可以使用以下正则表达式:
^/\w+/\w+/\w+$
^/foo/\\w+/\\w+$
您也可以在不使用正则表达式的情况下执行此操作:
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;
}
在Java中,您不需要转义/
@Pshemo感谢这一点。我会更新它。。。我还忘了提到反斜杠需要转义。谢谢顺便说一句,这个正则表达式不仅接受foo/whatever/this,还接受/bar/bar/bar
。把第一个代码< >代码> \W+<代码>改为<代码> Foo(如果我正确地理解了这些PAR是固定的,我不确定<代码>这个< /代码> PARTH)。@ pHeMo YUP,是真的。让我们把它添加到blah
part可以包含哪些类型的字符?它们只能是a-z
字符,还是也可以是0-9
或+
、
和其他一些字符?或者所有不是斜杠的字符都可以接受?谢谢-这对我来说是最有效的方法。@user3908134如果有效,请单击复选标记谢谢