轉載請注明出處:https://www.cnblogs.com/wenjunwei/p/9860994.html
需求
注:此正則只用於規范linux路徑格式。
linux路徑支持很多的特殊字符,但是我們應該養成一個好的習慣:只用字母、數字、下划線的組合命名目錄或文件。
如何使用正則表達式校驗一個linux路徑符合我們的格式要求呢?
格式要求:
- 必須'/'開頭
- 字符串只允許字母、數字、下划線
正確格式如下
/data/
/home/conf123
/data/nginx_conf/
錯誤格式如下
nginx_conf/
/data//
/data/conf@#/
校驗的表達式
^\/(\w+\/?)+$
在線測試地址
定義
正則表達式(regular expression):描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
正則表達式:就是用一個“字符串”來描述一個特征,然后去驗證另一個“字符串”是否符合這個特征。比如 表達式“ab+” 描述的特征是“一個 'a' 和 任意個 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特征。
使用場景
1.驗證字符串是否符合指定特征,比如驗證是否是合法的郵件地址。
2.用來查找字符串,從一個長的文本中查找符合指定特征的字符串,比查找固定字符串更加靈活方便。
3.用來替換,比普通的替換更強大。
分析
用於校驗上述格式的正確表達式
^\/(\w+\/?)+$
部分規則
正則表達式用到了很多字符,所以許多元字符要求在試圖匹配它們時特別對待。若要匹配這些特殊字符,必須首先使字符"轉義",即,將反斜杠字符 \ 放在它們前面。
用到的正則表達式的規則如下
字符 | 說明 |
---|---|
^ | 匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。匹配輸入字符串的開始位置。要匹配 '^' 字符本身,請使用 '\^'。 |
$ | 匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 '$' 字符本身,請使用 '\$'。 |
+ | 匹配前面的子表達式一次或多次。要匹配 '+' 字符本身,請使用 '\+'。 |
( ) | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。要匹配這些字符,請使用 '\(' 和 '\)'。 |
\w | 匹配所有的字母、數字、下划線的字符 |
? | 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配 '?' 字符,請使用 '\?'。 |
分析正則
- 前后使用了 '^' 和 '$' ,代表這里要校驗整個字符串(從字符串開頭到結尾)。
- 接下來 '\/'字符 ,這里用了斜桿轉譯,代表要以 / 開頭。
- 使用 '()'將子表達式寫在括號內。
- 括號內的表達式:'\w+',匹配出現一個或多個字母、數字、下划線的字符。'\/?',匹配斜杠,可有可無。
- 括號外的+號,匹配括號內的規則,一次或者多次。
將上述分析總結:校驗整個字符串 -> 以斜杠開頭 + ((一個或多個字符串 + 可有可無的斜桿)* n(大於0)次) 。
思考
以上正則是一定以斜桿開頭的,不允許使用相對路徑,那如果我們想支持斜杠開頭可有可無,應該怎么寫這個正則呢?
感謝您的閱讀,如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕。本文歡迎各位轉載,但是轉載文章之后必須在文章開頭給出原文鏈接。