Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式与特定数量/斜杠模式的表达式匹配_Java_Regex - Fatal编程技术网

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”是一个静态值,意味着它始终是“foo”,而“this”是相同的。“blah”和“something”表示可以是任何变量的变量

因此,我的正则表达式应该匹配以下字符串:

/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如果有效,请单击复选标记谢谢