![](/img/trans.png)
[英]regular expression to match a certain pattern and a certain number of values in between
[英]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.