我需要将数字限制在3.00到100.00之间我在表达式下使用
^([3-9]|[1-9][0-9]|100)+(.d{1,2})?$
上面表达式的问题是,它允许100.01到100.99,这应该受到限制。它还允许310到399,这需要加以限制。
我用了另一种味道相同的表达
^([3-9]|[1-9][0-9]|100.00)+(.d{1,2})?$
它按预期工作,但我们需要在中输入100.00来传递正则表达式,而不是100。
有什么办法,我可以达到预期的结果吗?
与最后一个100
交替使用时,对.d?[1-9]
使用负前瞻,以确保小数位数(如果有的话(只有0。
由于组末尾的+
,您的第一个模式也可以匹配可选小数(如333和101010(之前的多个重复数字,因此如果您只想在3和100之间匹配,最好删除+
。
^(?:[3-9]|[1-9][0-9]|100(?!.d?[1-9]))(?:.d{1,2})?$
^^^^^^^^^^^^^^
https://regex101.com/r/tJd3LQ/1
要允许前导零,请在^
:之后添加0*
^0*(?:[3-9]|[1-9][0-9]|100(?!.d?[1-9]))(?:.d{1,2})?$
^^
你可以试试这个伴侣
^(?:100(?:.0+)?|(?:[3-9]|[1-9][0-9])(?:.d{1,2})?)$
演示
解释
^
-锚表示字符串的开始(?:100(?:.0+)?)
-这将匹配100、100.0、100.00(任何小数位数的零(|
—更改此操作与逻辑OR操作相同(?:[3-9]|[1-9][0-9])(?:.d{1,2})?)
-这将匹配3.00到99.99之间的任何数字
建议
始终使用非捕获组,以防您在正则表达式中的其他位置没有再次使用该组。
^([3-9]|[1-9][0-9]|100)+(.d{1,2})?$
的问题在于,它在第一个区块(负责允许整数的区块(中也允许100。
在您的情况下,您需要使用类似的东西:^100.00$|([3-9]|[1-9][0-9])+(.d{1,2})?$
(此处的示例(。
此表达式将尝试将100.00
作为一个整体进行匹配(这是您的上界,或者是3.00
到99.99
之间的任何数字。
也许这个正则表达式适用于您:
^([3-9]|[1-9][0-9])(.[0-9]+)?$|^100(.0+)?$
测试:
$ cat numeric.txt
0.0
3
3.0
3.00
3.001
2.99
99.99
99.999
100
100.0
100.00
100.01
100.99
$ egrep '^([3-9]|[1-9][0-9])(.[0-9]+)?$|^100(.0+)?$' numeric.txt
3
3.0
3.00
3.001
99.99
99.999
100
100.0
100.00