繁体   English   中英

正则表达式匹配具有一定数量/模式的斜杠的表达式

[英]Regex to match expression with certain number/pattern of slashes

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

我输入的数据看起来像这样:

/foo/blah/something/this

和一些看起来像这样:

/foo/blah/this

我需要一个正则表达式将匹配后者,但不能匹配前者。

换一种说法:

  • /foo/*/this应该匹配
  • /foo/*/*/this应该匹配

“ 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类的东西也可以工作,则可以用[^/]*替换[^/]+

您可以为此使用正则表达式 ,也可以使用字符串类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

您可以使用此正则表达式:

^/\w+/\w+/\w+$

工作演示

在此处输入图片说明

感谢Pshemo的评论。 我忘了提一下,对于Java,您需要转义反斜杠,并且/不需要转义。

因此,Java正则表达式为:

^/\\w+/\\w+/\\w+$

顺便说一句,一个不错的Pschemo观察是,如果您将/foo作为静态值。 您可以使用此正则表达式:

^/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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM