正则表达式是否可以允许匹配具有最大字符数,在不同的字符类之间划分?
我需要匹配最多4位数的数字,有或没有十进制数字。所以这些都应该与正则表达式匹配:
123
1234
12.34
123.4
但这些不应该:
12345
12.345
在概念上,这样的事情应该有效,除非它没有:
([0-9]{0,4}([.]?[0-9]{0,4})){0,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
答案 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