![](/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.