【问题标题】:Regular Expression to match dimension specification正则表达式匹配维度规范
【发布时间】:2010-09-27 19:32:21
【问题描述】:

我需要一些帮助来编写一个匹配的正则表达式:

  • 一个左方括号或数字作为第一个字符
  • 右方括号(如果有左方括号)或数字(如果开头是数字)作为最后一个字符
  • 至少一个逗号分隔两个数字而不用空格,如果逗号更多,它们必须是分隔数字而不是空格

示例匹配:

  • 1,1
  • [1,1]
  • [1,1,2,3]

不匹配:

  • [1,1
  • 1, 1
  • [1, 2,2]
  • [1,2,]

【问题讨论】:

  • 这将有助于展示您的尝试。

标签: java regex


【解决方案1】:

假设“数字”是数字类\d 的一次或多次出现,一个正则表达式将是:

^\d+(,\d+)+$|^\[\d+(,\d+)+\]$

“数字”的其他变体可能是 [1-9][0-9]*,它不允许前导零,并且更接近 十进制 整数文字的 C/C++/C#/Java 表示。例如,C/C++/C#/Java 中的前导零表示 八进制 整数文字。在 Java 中,我相信 0 正式是十进制文字,因此更准确的表达式是 0|[1-9][0-9]* 而在 C++ 中 0 在技术上是八进制文字(我认为!)。

假设 Java 风格的整数文字,我们的表达式将变为:

^(0|[1-9][0-9]*)(,(0|[1-9][0-9]*)+)+$|^\[(0|[1-9][0-9]*)+(,(0|[1-9][0-9]*)+)+\]$

无论您做什么,您都需要确定在您的情况下什么构成“数字”,它可能与您实现程序所用的编程语言相同,也可能不同。

有用的链接:

【讨论】:

  • 我认为你的正则表达式匹配这个无效的情况:rubular.com/r/uV6esNPA50
  • 我刚刚添加了更多锚字符(^$)来解决这个问题。对此感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多