簡體   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