2013-02-08 54 views
0

我試圖匹配格式化爲[整數] [結腸] [alphanum] [結腸] [整數]的字符串。例如,42100:ZBA01:20。我需要通過冒號拆分這些...正則表達式匹配[整數] [結腸] [alphanum] [結腸] [整數]

我想學習正則表達式,所以如果可以的話,告訴我我做錯了什麼: 這就是我所能想到的。 ..

^(\d):([A-Za-z0-9_]):(\d)+$ 
^(\d+)$ 
^[a-zA-Z0-9_](:)+$ 
^(:)(\d+)$ 

起初我試着匹配部分字符串,這些匹配整個字符串。正如你所看到的,我對正則表達式不是很熟悉。

編輯:正則表達式是輸入一個桌面應用程序。我不確定要使用哪種「語言」或「類型」的正則表達式,所以我認爲.NET。 我需要能夠識別每個分組字符,按冒號分隔。因此,組#1應該是第一個整數,組#2應該是字母數字組,組#3應該是整數(範圍1-4)。

謝謝你在前進,

大流士

+1

分割什麼!..... – Anirudha 2013-02-08 15:20:19

+0

對不起分號,這是我做的改變。發佈更新。 – Darius 2013-02-08 15:23:31

+1

,你需要指定你正在使用的語言..正則表達式實現在不同的語言中有所不同 – Anirudha 2013-02-08 15:25:21

回答

5

我承擔分號(;)的意思是冒號(:)?好,有一些基礎知識。

  • ^匹配輸入的開始。也就是說,正則表達式只有在輸入開始時發現匹配時纔會匹配。
  • 同樣,$輸入的端部相匹配。

^(\d+)$將匹配由一個或多個數字的字符串。這是因爲匹配需要在輸入開始時開始,並在輸入結束時停止。換句話說,整個輸入需要匹配(而不僅僅是它的一部分)。所述+表示一個或多個匹配。

有了這些知識,你會發現^(\d):([A-Za-z0-9_]):(\d)+$實際上是非常接近的是正確的。該表達式表明整個輸入需要匹配:

  1. 一個數字;
  2. 冒號;
  3. 一個字字符(或調用它的一個字母數字字符);
  4. 冒號;
  5. 一位或多位數字。

的問題顯然是在1和3,您需要添加一個+量詞有匹配一個或多個倍,而不是隻一次。此外,您希望將這些量詞放置在捕獲組內,以便獲取一個捕獲組內的多個匹配,而不是接收包含單個匹配的多個捕獲組。

^(\d+):([A-Za-z0-9_]+):(\d+)$ 
+0

是'_'甚至字母數字? – nhahtdh 2013-02-08 15:29:54

+0

從技術上講,沒有。但是OP沒有清楚地表明他在找什麼。 – 2013-02-08 15:30:52

+0

@nhahtdh在大多數變體中,它被稱爲*單詞字符*。爲了清晰起見,我更新了答案 – 2013-02-08 15:31:55

3

您需要使用量詞

^(\d+):([A-Za-z0-9_]+):(\d+)$ 
    ^ ^ ^

+是量詞匹配前述模式1到多次

現在,您可以訪問通過訪問特定組的值

+1

在某些語言中,'\ w'不僅包含簡單的字母數字('_'和'-'是兩個常見的)。 – 2013-02-08 15:25:19

+0

@JonahBishop謝謝你的建議..編輯的ans..stackoverflow應該強制標記正則表達式的問題與他們正在使用的語言... – Anirudha 2013-02-08 15:26:30

+0

@JonahBishop:哪一種語言包括'-'?到目前爲止,我所看到的全部是字母數字和'_'。 – nhahtdh 2013-02-08 15:27:34