我有以下的正則表達式:爲什麼量詞不起作用
^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$
現在我需要用25個字來限制總字符串長度: 我試過如下:
^((?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?){0,25}$
但仍然匹配超過25個字符的正則表達式,爲什麼?
我有以下的正則表達式:爲什麼量詞不起作用
^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$
現在我需要用25個字來限制總字符串長度: 我試過如下:
^((?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?){0,25}$
但仍然匹配超過25個字符的正則表達式,爲什麼?
量詞被應用於它之前的標記。就你而言,這是一個完整的組,而且該組可以匹配比單個字符更多的內容。
單獨執行長度檢查,使用positive lookahead assertion:
^(?=.{0,25}$)(?:\w+\/)?\[email protected]\w+\.\w+$
正如你所看到的,您正則表達式也可以簡化頗有幾分(無需懶惰量詞和字符類)。
謝謝,我現在明白了這個問題。我做了量詞'{2}'並複製了字符串,所以它匹配了,我明白你的意思。一個問題,你爲什麼放棄懶惰量詞? –
當你真的需要貪婪的量詞時,你不需要懶惰的量詞。 –
@WiktorStribiżew,謝謝,但我不明白爲什麼我需要貪婪的人在這裏。你能詳細說明嗎? –
何不乾脆
if (inputStr.length <= 25 && /^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$/.test(inputStr))
{
//your logic
}
表現明智,'長度'檢查應該首先。 –
@JamesDonnelly同意,發了更改 – gurvinder372
如果我們稱之爲原正則表達式一個
^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$
然後你的下一個正則表達式可以更簡單地表達
^(A){0,25}$
所以你不只匹配25個字符,你匹配A
0到25次
你可以發佈一些匹配或不匹配的例子嗎? –
匹配0到25次出現的內容() –
爲什麼不能簡單地檢查字符串的長度是否小於或等於25? – gurvinder372