[英]improving regex that matches {m,n}|{m,}|{,n}|{n} in the beginning of the line
[英]What's difference between regex{m,n} and (regex){m,n}?
我正在開發一個docker項目,需要編寫一個正則表達式來檢查存儲庫名稱。 要求如下:
那么,我的正則表達式是:
([a-z0-9]+(?:[._-][a-z0-9]+)*){2,255}
但是,當存儲庫名稱為e-e_1.1
時,它可能不行
當我將其更改為:
[a-z0-9]+(?:[._-][a-z0-9]+)*{2,255}
沒關系。
有人可以解釋一下嗎? 先感謝您。
在([a-z0-9]+(?:[._-][a-z0-9]+)*){2,255}
正則表達式中,限制量詞{2,255}
應用於第1組內的整個模式( [a-z0-9]+(?:[._-][a-z0-9]+)*
)。 這意味着它可以重復2到255次。 這並不意味着整個字符串長度限制為2到255個字符。
現在,您的[a-z0-9]+(?:[._-][a-z0-9]+)*{2,255}
正則表達式也可以匹配無限字符,因為字符串與[a-z0-9]+
匹配[a-z0-9]+
可以有1個或多個字符。 (?:[._-][a-z0-9]+)*
可以匹配零個或多個字符。 限制量詞{2,255}
在這里並不能滿足您的需要。
要將輸入字符串的長度限制為2到255個字符,您必須使用在開頭處錨定的前瞻:
^(?=.{2,255}$)[a-z0-9]+(?:[._-][a-z0-9]+)*$
^^^^^^^^^^^^^
(?=.{2,255}$)
預測將僅在字符串的開頭執行一次,只有在前瞻中的條件滿足時才會找到匹配:必須有2到255個字符( .
匹配任何字符)除了換行符之外,它並不重要,因為您只允許匹配模式中的特定字符,直到字符串的結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.