验证页码/范围以进行打印

pan*_*kti 3 java regex

我正在编写一个用于匹配特定模式的正则表达式,如下所示。

我们都熟悉我们在通过 Word 文档打印选择性页面时给出的模式。IE

  • 我们可以使用逗号和连字符
  • 不允许使用其他特殊字符
  • 应该以数字开头和结尾
  • 逗号和连字符不允许一起使用等

有效值:

1, 3, 6-9
1-5, 5
6, 9
Run Code Online (Sandbox Code Playgroud)

无效值:

,5
5-,9
9-5,
2,6-
Run Code Online (Sandbox Code Playgroud)

我一直在使用该模式,(([0-9]+)|(\\d.*[-,]\\d.*)+)但它不适用于所有排列组合。

任何帮助将不胜感激!

anu*_*ava 5

你可以在 Java 中使用这个正则表达式:

^\d+(?:-\d+)?(?:,\h*\d+(?:-\d+)?)*$
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式详情:

  • ^: 开始
  • \d+(?:-\d+)?: 匹配 1+ 位数字,可选后跟连字符和 1+ 位数字
  • (?:: 启动非捕获组
    • ,: 匹配逗号
    • \h*: 匹配 0 个或多个空格
    • \d+(?:-\d+)?: 匹配 1+ 位数字,可选后跟连字符和 1+ 位数字
  • )*: 结束非捕获组。*重复此组 0 次或更多次
  • $: 结尾


nha*_*tdh 5

以下正则表达式将验证它是否是一个以逗号分隔的正自然数列表或数字范围(由 2 个正自然数组成,并用 分隔-):

^\d+(-\d+)?(?:,\d+(?:-\d+)?)*+$
Run Code Online (Sandbox Code Playgroud)

在字符串文字中:

"^\\d+(-\\d+)?(?:,\\d+(?:-\\d+)?)*+$"
Run Code Online (Sandbox Code Playgroud)

如果您想知道*+,它是通常的 0 或更多量词的所有格*版本。基本上,它减少了回溯。此语法在 Java 和 PCRE 中可用,但对于不支持的语言,请+删除*+.