【问题标题】:Regex with comma separated numbers in ApexApex中带有逗号分隔数字的正则表达式
【发布时间】:2012-07-26 15:23:21
【问题描述】:

作为前言,我意识到还有其他关于用逗号分隔数字的正则表达式的主题,但是当我尝试使用这些解决方案时,它们不起作用。

基本上,我正在尝试创建一个正则表达式来识别逗号分隔的数字(在这种情况下没有空格)。在尝试将其转换为实际的正则表达式语法之前,我意识到它可能应该像这样工作,其中 'd' 是一个数字,',' 是一个逗号,而 '+' 是一个 kleene plus:

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

或

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

这是我在 Apex 验证中使用的代码,以确保某个字段是由逗号分隔且不带空格的数字列表(注意:我尝试了几种变体均无济于事,但只会发布一个) :

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

由于某种原因,这不起作用,但它似乎是任何数字 1 次或多次后跟单个逗号的正确语法,并且整个表达式可以重复 0 次或多次,并且整个重复表达式应始终后跟至少 1 位数字。

这个表达式在实践中确实可以识别所有接受的形式(例如:100 或 100,200 等),但由于某种原因,它也接受像

这样的答案
'100,200,'

或

'100,200,,'

或

'100,,200'

我很困惑为什么这不能像以前给出的解决方案一样有效,这些解决方案似乎与我的做法相同。提前感谢您的帮助!

【问题讨论】:

  • 可能类似于:^(\d+,)*\d+$ .. 好的,很抱歉您已经在问题上写了完全相同的表达式。你可以尝试像我 ^$ 那样使用锚点,看看会发生什么。无论如何,你的行为真的很奇怪。我现在意识到锚点会有所作为,因为它们会迫使整个字符串与模式匹配,而不仅仅是一小部分。请避免像有人建议的那样使用环顾四周。
  • 我不知道为什么指出它是一行的开头和结尾会使正则表达式起作用,但出于某种原因它确实如此!谢谢!另外,我不完全是您避免使用环顾的意思。你能澄清一下吗?
  • 以前它适用于像“100,200”这样的字符串,因为实际上它包含(!)第一部分“100,200”中的匹配项。如果您使用锚点,您将告诉匹配项必须代表整个字符串而不仅仅是一部分。环顾四周,我错了……实际上我误解了……对不起。
  • @Diego 您可以添加您的评论作为答案。这似乎是 OP 想要的,他可以接受你的回答。
  • 好的,我现在就做。谢谢

标签: regex oracle-apex


【解决方案1】:

就是这样:

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

锚点^$ 会有所作为,因为它们会强制整个字符串(而不仅仅是一部分)与模式匹配

【讨论】:

    【解决方案2】:

    你应该尝试这样的模式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多