2012-07-26 81 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)+$