爲我的類之一我要描述下面的正則表達式::符號在正則表達式
\ B4 [0-9] {12}(?:[0-9] {3})\ b
據我所知,它選擇的數字是:以4開頭,後面跟着12個數字(每個數字在0-9之間),然後是另一個3位數字。
我不明白的是用分號(?:....)表示的問號。我嘗試過在網上查找這意味着什麼,但我發現的鏈接有點令人困惑;我希望有人能夠給我一個關於這個例子中問號所做的快速基本概念。
爲我的類之一我要描述下面的正則表達式::符號在正則表達式
\ B4 [0-9] {12}(?:[0-9] {3})\ b
據我所知,它選擇的數字是:以4開頭,後面跟着12個數字(每個數字在0-9之間),然後是另一個3位數字。
我不明白的是用分號(?:....)表示的問號。我嘗試過在網上查找這意味着什麼,但我發現的鏈接有點令人困惑;我希望有人能夠給我一個關於這個例子中問號所做的快速基本概念。
它被稱爲'非捕獲組',這意味着正則表達式而不是通過匹配內部的匹配來創建一個組,如同它會做的那樣(通常,括號會創建一個組)。
這將是短答案。
當您使用(?:)
時,表示group
已匹配但未被捕獲以進行回參考,即未捕獲組。它沒有存儲在內存中以供稍後參考。
例如:
(34)5\1
這正則表達式意味着你再次34
尋找34
其次5
然後。當然,你可以把它寫成34534
,但有時captured group
是一種複雜的模式,你無法事先預測。
所以無論是否匹配捕獲組應該再次出現。
Regex101 demo for back-referencing
背引用也可用於同時更換。
例如:
([A-Z]+)[0-9]+
此正則表達式將查找many
大寫字母接着many
數字。我希望用找到大寫字母替換整個模式。
然後,我會通過使用\1
其代表背面引用第一捕獲組替換整個圖案。
如果更改爲(?:[A-Z]+)[0-9]+
這將不再捕獲它,因此不能被引用了。
:用於表示非捕獲組。你可以參考 http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group – firec