2016-10-22 89 views
1

我想學習正則表達式我的項目我正在使用它進行輸入驗證,因爲我被告知使用正則表達式是做輸入驗證的最佳方法之一。正則表達式匹配多個座標分隔空格

所以,我試圖確保一個字符串包含未知數的座標,它們之間用空格分隔。輸入內容的例子是2,2 23.45,6 45,21.65 2,2我不確定它是否重要,但最後的座標總是與第一個匹配。不能有任何符號或無關的空格或逗號。只有十進制數字以逗號分隔,後跟空格或結尾字符。

我意識到這可能是一個相當複雜的表達式,而且我非常喜歡跳入正則表達式,所以對此的任何幫助都會非常感謝。如果這改變了什麼,我正在用C++進行編程。謝謝。

編輯:

我已經忘記了負數和換行符的可能性。我也接受輸入中的負數和換行符。 所以輸入-2.3,2 34,-2 -2.3,2\n是可以接受的。感謝大家到目前爲止的幫助。

+0

看起來你可以有空格和逗號分隔數字。 –

+0

@TimBiegeleisen它們是技術上有序的對。所以我需要2個用逗號分隔的數字。然後如果有多於一對的有序對,則這些對由一個空格分開。 – rph020798

+0

負數,指數符號怎麼樣?你幾乎必須自己寫表達式來描述語法。是「+ 4.3, - 」。一個有效的組件? –

回答

1

你可以試試這個正則表達式:

^\d+(?:\.\d+)?,(?:\d+(?:\.\d+)? \d+(?:\.\d+)?,)*\d+(?:\.\d+)?$ 

演示在這裏:

Regex101

注:\d+(?:\.\d+)?匹配任何數量的,可能有小數部分的正則表達式。括號內的?:將數量標記爲非捕獲組。這告訴正則表達式引擎不捕獲裏面的內容,因爲我們不想在這裏實際捕獲任何東西。這可能會導致更有效的正則表達式。

+0

雖然不完整,例如簽署規範和換行符,讓我們假設這是答案。現在,一個不懂正則表達式的人將如何確認答案?儘管如此,它還是很慷慨的。 –

+0

我沒有想過換行符,而OP也沒有提到否定符號的可能性。 –

+0

+1表示regex101,允許提問者學習正則表達式,而不是試圖簡單地實現它。我正在爲它添加書籤。 –