2012-07-26 67 views
1

作爲序言,我意識到正則表達式中有其他主題用逗號分隔數字,但是當我嘗試使用這些解決方案時,它們不起作用。用逗號隔開的正則表達式在Apex中使用逗號分隔數字

基本上,我想創建一個正則表達式來識別逗號分隔的數字(在這種情況下沒有空格)。在嘗試將其轉換爲實際的正則表達式語法之前,我意識到它應該可以這樣工作,其中'd'是數字,','是逗號,'+'是kleene加號:

((d+),)*(d+) 

(d+)(,(d+))* 

這裏是我正在使用的頂點驗證,以確保某一個領域是沒有空格(注意:用逗號分隔的數字列表中的代碼:我已經試過這幾個變化無濟於事,但只會發佈一個):

(\d+,)*(\d+) 

出於某種原因,這是行不通的,但它似乎是任何數字的正確語法1次或更多次,後跟一個逗號,並且整個表達式可以重複0次或更多次,並且整個重複表達式應該總是跟着至少1位數字。

在實踐中這種表達不承認所有接受的形式(例如:100或100,200等),但由於某些原因,也接受像

'100,200,' 

'100,200,,' 

答案
'100,,200' 

我很困難,爲什麼這不能像以前給出的解決方案這似乎與我做同樣的事情。感謝您提前提供任何幫助!

+2

也許是這樣的:'^(\ d +,)* \ d + $'..好的,我很抱歉,您已經在您的問題上寫下完全相同的表達。你可以嘗試使用錨點,就像我做了'^ $'看看會發生什麼。無論如何,你得到的行爲真的很奇怪。我意識到現在錨點將會產生變化,因爲它們會迫使整個絃線不僅僅是一小部分,而是與模式相匹配。並且請避免像有人建議的那樣四處張望。 – 2012-07-26 15:25:43

+0

我不知道爲什麼表示這是一個行的開始和結尾會使正則表達式工作,但它出於某種原因!謝謝!此外,我不完全是你的意思,避免使用環顧四周。你能澄清嗎? – Mike 2012-07-26 15:30:36

+0

以前它適用於像「100,200 ,,這樣的字符串,因爲它實際上包含(!)第一部分」100,200「中的匹配。如果你使用錨點,你告訴比賽必須代表整個字符串,而不僅僅是一個部分。爲了環顧四周,我錯了......其實我誤解了......。 – 2012-07-26 15:32:15

回答

3

就是這樣:

^(\d+,)*\d+$ 

^$將賺取差價,因爲他們將迫使整個字符串(而不只是一部分)來匹配模式

2

你應該嘗試模式是這樣的:

^(?:(\d+),)+(\d)+$ 
相關問題