我想創建一個匹配模式的正則表達式,但如果最後一組長度不是4個字符,則匹配不匹配。正則表達式只匹配最後一組長度爲n個字符
實施例:
正則表達式:({1,} - )({1,} - )({1,} - )(\ d {4,4})
好輸入:A- AAAA-A-0001
壞輸入:A-AAAA-A-00011
我正則表達式失敗時,它從兩個輸入
我想創建一個匹配模式的正則表達式,但如果最後一組長度不是4個字符,則匹配不匹配。正則表達式只匹配最後一組長度爲n個字符
實施例:
正則表達式:({1,} - )({1,} - )({1,} - )(\ d {4,4})
好輸入:A- AAAA-A-0001
壞輸入:A-AAAA-A-00011
我正則表達式失敗時,它從兩個輸入
以下正則表達式將從一個字符串內部拾取匹配(即它會找到匹配的子字符串):
(?<=\s|^)([^\s]+-){3}(\d{4})(?=\s|$)
下面將拿起匹配整個字符串僅
^([^\s]+-){3}(\d{4})$
我已經簡化您正則表達式一點,但做你使用每組字的東西不是假設。
我把你的:
(.{1,}-)(.{1,}-)(.{1,}-)
進入
([^\s]+-){3}
它說「匹配任何不是空白,並用破折號恰好3次結束的‘+’操作符是速記話說{1]或 「至少一次」。
我們能更具體?
我懷疑你可能只想匹配字母數字值。例如,我懷疑$-A%^[email protected]
是否適合您。如果我是正確的這一點,你要使用速記字符類,這將使你的正則表達式是這樣的,而不是(我假設你的正則表達式是區分大小寫):
匹配字符串:
(?<=\s|^)([A-Za-z\d]+-){3}(\d{4})(?=\s|$)
匹配整個字符串:
^([A-Za-z\d]+-){3}(\d{4})$
幾個指針:
{4,4}
說「正好4倍」,只是用 {4}
{1,}
說「1次以上」的,只是使用 +
(?={regex in here})
手段,向前看的字符串和比賽中的但不要將它添加到我的結果中(它被稱爲積極lookahead)(?<={regex in here})
意味着,在字符串中向後看並匹配以下內容,但不要將其添加到我的結果中(它被稱爲積極lookbehead )錨正則表達式與^
和$
拿起A-AAAA-A-0001相應地開始和結束一個字符串。
如果不是整個字符串,則式斷言會幫助你(?!\d)
參考文獻:
首先,我建議你稍微簡化一下你的正則表達式。我的建議是:
(\w+-){3}(\d{4})
既然你有3組後跟一個-
標誌字字符,這是非常簡單的。現在
,爲了捕捉只有那些期望的比賽,如果你正在測試正是這些字符串,你只需要添加^
和$
分隔符。
^(\w+-){3}(\d{4})$
請檢查this Regex101 link以查看它的行動。
感謝指針,他們真的很有幫助。 – Cogslave
如果您熱衷於正則表達式,由於某種原因,我可能想要查看名爲RegexBuddy的應用程序。對於初學者來說,這對於專家來說非常棒。您可以插入測試數據並編寫正則表達式,並查看它實時提取的匹配項。它也有非常好的上下文幫助,一個可視化的正則表達式構建器,可以將正則表達式解碼爲純英語,還可以將完成的正則表達式導出到任意數量的編程語言(如果您使用的語言不受支持,它也會發出警告)。我並不隸屬於那些一直喜歡這款產品的人 –