正则表达式:限制

时间:2017-03-08 15:43:49

标签: regex

正则表达式是否可以允许匹配具有最大字符数,在不同的字符类之间划分?

我需要匹配最多4位数的数字,有或没有十进制数字。所以这些都应该与正则表达式匹配:

123
1234
12.34
123.4

但这些不应该:

12345
12.345

在概念上,这样的事情应该有效,除非它没有:

([0-9]{0,4}([.]?[0-9]{0,4})){0,4}

4 个答案:

答案 0 :(得分:1)

它不漂亮,但你可以这样做:

IShellInfo

确保你周围有一些边界控制字符。

这样说:

(\d{1,4}|\d{0,3}\.\d|\d{0,2}\.\d{0,2}|\d\.\d{0,3})

您可以see here按预期工作。

但我会建议在这个具体案例中使用另一种工具。

答案 1 :(得分:1)

以下正则表达式应该这样做......

\b(?:\d{1,3}\.\d{1,2}|\d{1}\.\d{1,3}|(?<!\.)\d{1,4}(?!\.))\b

参见 regex demo / explanation

答案 2 :(得分:1)

使用向前看断言最多只有1个点:

^(?!([^.]\.){2})(?!\d{5})[\d.]{3,5}$
  • (?!([^.]\.){2})表示“向前看,没有2点
  • (?!\d{5})表示“向前看,没有5位直接数字”
  • [\d.]{3,5}表示“3-5个数字和点”

请参阅live demo

要将十进制数字限制为最大值2,请添加一个(?!.*\.\\d{3,}$),这对于“最后点数为3+的数字”是负面的,即:

^(?!([^.]\.){2})(?!\d{5})(?!.*\.\\d{3,}$)[\d.]{3,5}$

请参阅live demo

答案 3 :(得分:1)

如果你的正则表达式接受它,你可以使用如下的前瞻:

编辑:允许最多2位小数

frame.getRootPane.setDefaultButon( fullScreenButton );

<强>解释

^(?:\d{1,4}|(?=.{1,5}$)\d+\.\d{1,2})$

^               : begining of string
  (?:           : start non capture group
    \d{1,4}     : 1 up to 4 digit
    |           : OR
    (?=         : lookahead
      .{1,5}$   : 1 up to 5 character (it could be .{3,5} if at least 1 digit is mandatory on each side of the dot)
    )           : end lookahead
    \d+         : 1 or more digits, integer part
    \.          : dot
    \d{1,2}     : 1 or 2 digits, decimal part
  )             : end group
$               : end of string