正则表达式匹配表达式与某些数字/模式的斜杠

时间:2014-08-04 20:47:25

标签: java regex

如果我举例,这可能是最简单的......

我输入的数据如下:

/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

任何帮助?

4 个答案:

答案 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

enter image description here

感谢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;
}