2013-02-11 40 views
2

我有解決這個問題:http://regexone.com/lesson/13一些關於正則表達式

我試圖做這樣的事情:(\d+x\d+)

但爲什麼它不工作?無論如何,我們如何使用「分組」?謝謝!

input text required capturing group result 
1280x720 1280, 720 
1920x1600 1920, 1600 
1024x768 1024, 768 
+1

這並不是說我擅長用正則表達式,但我得到了它與'(\ d +)×(\ d +)'工作。有涉及編程問題嗎? – chris 2013-02-11 03:09:28

回答

1

該練習是關於捕獲組。要求是分別捕捉的數字序列,並跳過x,像這樣:

(\d+)x(\d+) 

你的溶液,另一方面,捕獲整個輸入到由括號表示的單捕獲組。

當您需要處理由正則表達式捕獲的輸入的各個部分時,捕獲組的概念非常重要,而不是處理整個捕獲。在鏈接的示例中,您可以獲取分辨率水平分量的第一組,分辨率垂直分量的第二組。如果沒有兩個獨立的捕獲組,您需要在代碼中找到x,並進行額外的拆分。

1

捕獲組由括號()包圍。

在您的正則表達式(\d+x\d+)中,有一個捕獲組 - 整個\d+x\d+的事情,因爲整個正則表達式被捕獲組包圍。

特別是在這個問題中,你想得到兩個單獨的數字。所以,一個小組將「捕獲」一個數字,另一個小組「捕獲」另一個數字。

因此,對於第一組,您將僅捕獲第一個數字(字符序列) - (\d+)。第二個也一樣。

此外,你不需要x,所以你會把它放在任何捕獲組之外。

因此,(\d+)x(\d+)將是你想要的。

1

你想要匹配兩個特定的東西 - x和y分辨率。這意味着,你需要兩個組。

所以,你知道你需要:()()

你不想在x捕獲與x坐在你想拍攝的東西之間: ()x()

最後,我們需要填寫什麼我們」重新尋找。我們想要一個或多個(+)數字(\ d)。因此,完成正則表達式是:

(\d+)x(\d+)