2014-02-19 14 views
6

許願把一些訂單到我的正則表達式,我決定一本書去了解他們,介紹正則表達式的知識。而且我知道這很愚蠢,但其中一個介紹性例子對我沒有意義。很難理解捕獲組和反向引用

(\d)\d\1 

示例文本:

123-456-7890 

(應該捕獲的第一個數字,123

誰能解釋什麼是怎麼回事?

據我所知,第一個\d捕獲數字123.該\1反向引用(標記)該組以備後用。括號限制了組的範圍。但第二個\d做什麼?

簡單的解釋,就像一個小的孩子或金毛獵犬者優先。

+0

爲了真正理解正則表達式,請閱讀:[掌握正則表達式(第三版)](http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124)作者:Jeffrey Friedl。Best關於正則表達式 - 永遠!「) – ridgerunner

+0

@ridgerunner - 我認爲在這個階段對我來說有點過於先進。也許,在未來的日子裏:) – Rook

+0

實際上,MRE是以教程風格編寫的,從最基本的開始就從頭開始。手下來,我讀過的最有用的書。 – ridgerunner

回答

6

\d只是一個數字。

這個正則表達式不匹配"123-456-7890"字符串,但它會匹配"323"(這可能是一個更大的字符串的一部分,例如"323-456-7890"):現在

(\d) : first digit ("3") 
\d : another digit ("2") 
\1 : first group (which was "3") 

,如果你的書假裝(\d)\d\1應捕捉"123""123-456-7890",那麼它可能包含一個錯誤......一步

+0

如果我理解你的權利。第一個\ d只是一個數字(一個字符)。在代表一個組的括號中。第二個\ d只是另一個數字。 \ 1引用最後的括號,例如組1號。如果我想稍後反向引用它,我可以放2嗎? – Rook

+0

(\ d)匹配3,\ d匹配2,並且\ 1匹配3,因爲這是匹配/從第一組引用的內容? – Rook

+0

@ldigas對所有人都是,除了我還沒有理解你關於\ 2的問題。 –

4

(\d)\d\1步:

  1. 第一\d匹配一個數字
  2. 而括號()馬克此作爲捕獲組 - 這是第一個,所以該數字將被記住,「組1」
  3. 第二\d說,有另一個數字
  4. \1說:「這裏是我們的前一組值1」 - 這是在步驟相匹配的數字1

所以像dystroy已經說了:正則表達式應該匹配的三個數字,其中一個序列第一和第三是相等的。