1. 程式人生 > >正則表示式-linux路徑匹配

正則表示式-linux路徑匹配

需求

使用正則表示式判斷字串是否為liunx路徑

格式要求:

  • 必須'/'開頭
  • 字串只允許字母、數字、下劃線

正確格式如下

/data/
/home/conf123
/data/nginx_conf/

錯誤格式如下

nginx_conf/
/data//
/data/[email protected]#/

校驗的表示式

^\/(\w+\/?)+$

線上測試地址

定義

正則表示式(regular expression):描述了一種字串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

正則表示式:就是用一個“字串”來描述一個特徵,然後去驗證另一個“字串”是否符合這個特徵。比如 表示式“ab+” 描述的特徵是“一個 'a' 和 任意個 'b' ”,那麼 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特徵。

使用場景

1.驗證字串是否符合指定特徵,比如驗證是否是合法的郵件地址。

2.用來查詢字串,從一個長的文字中查詢符合指定特徵的字串,比查詢固定字串更加靈活方便。

3.用來替換,比普通的替換更強大。

分析

用於校驗上述格式的正確表示式

^\/(\w+\/?)+$

部分規則

正則表示式用到了很多字元,所以許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜槓字元 \ 放在它們前面。

用到的正則表示式的規則如下

字元說明
^ 匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。匹配輸入字串的開始位置。要匹配 '^' 字元本身,請使用 '\^'。
$ 匹配輸入字串的結尾位置。如果設定了 RegExp 物件的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 '$' 字元本身,請使用 '\$'。
+ 匹配前面的子表示式一次或多次。要匹配 '+' 字元本身,請使用 '\+'。
( ) 標記一個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 '\(' 和 '\)'。
\w 匹配所有的字母、數字、下劃線的字元
? 匹配前面的子表示式零次或一次,或指明一個非貪婪限定符。要匹配 '?' 字元,請使用 '\?'。

分析正則

  1. 前後使用了 '^' 和 '$' ,代表這裡要校驗整個字串(從字串開頭到結尾)。
  2. 接下來 '\/'字元 ,這裡用了斜杆轉譯,代表要以 / 開頭。
  3. 使用 '()'將子表示式寫在括號內。
  4. 括號內的表示式:'\w+',匹配出現一個或多個字母、數字、下劃線的字元。'\/?',匹配斜槓,可有可無。
  5. 括號外的+號,匹配括號內的規則,一次或者多次。

將上述分析總結:校驗整個字串 -> 以斜槓開頭 + ((一個或多個字串 + 可有可無的斜杆)* n(大於0)次) 。

思考

以上正則是一定以斜杆開頭的,不允許使用相對路徑,那如果我們想支援斜槓開頭可有可無,應該怎麼寫這個正則呢?

感謝您的閱讀,如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕。本文歡迎各位轉載,但是轉載文章之後必須在文章開頭給出原文連結。