Answers:
使用以下内容:
/^\d*\.?\d*$/
^
-生产线的起点;\d*
-0或更多数字;\.?
-一个可选的点(由于在正则表达式中转义,.
是一个特殊字符);\d*
-0或更多数字(小数部分);$
- 队伍的尽头。这允许0.5小数而不是要求前导零,例如0.5
/^\d*\.?\d+$/
强制小数点后的数字。
/\d+\.?\d*/
一个或多个数字(\d+
),可选的句点(\.?
),零个或多个数字(\d*
)。
根据您的用法或正则表达式引擎,您可能需要添加起始/结束行锚点:
/^\d+\.?\d*$/
.
空字符串都匹配。
-
。
您需要如下所示的正则表达式才能正确执行此操作:
/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/
使用扩展修饰符(由Perl支持),具有与空格相同的表达式:
/^ [+-]? ( (\d+ (\.\d*)?) | (\.\d+) ) $/x
或带有注释:
/^ # Beginning of string
[+-]? # Optional plus or minus character
( # Followed by either:
( # Start of first option
\d+ # One or more digits
(\.\d*)? # Optionally followed by: one decimal point and zero or more digits
) # End of first option
| # or
(\.\d+) # One decimal point followed by one or more digits
) # End of grouping of the OR options
$ # End of string (i.e. no extra characters remaining)
/x # Extended modifier (allows whitespace & comments in regular expression)
例如,它将匹配:
并将拒绝这些非数字:
比较简单的解决方案可能会错误地拒绝有效数字或匹配这些非数字。
^A?(B|C)$
。以前,它的写法是“ ^A?B|C$
实际上意味着(^A?B)|(C$)
哪个不正确”。注意:^(A?B|C)$
这也是不正确的,因为它实际上意味着^((A?B)|(C))$
不匹配“ +.5”。
试试这个正则表达式:
\d+\.?\d*
\ d +可选小数点前的数字
。可选十进制(由于?量而可选)
\ d *十进制后的可选数字
123.
我认为这是最好的,因为它符合所有要求:
^\d+(\\.\d+)?$
我最终使用以下内容:
^\d*\.?\d+$
这使以下内容无效:
.
3.
.3
^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$
应该反映人们通常认为的格式正确的十进制数。
小数点前的数字可以是一个数字(在这种情况下,可以是0到9),也可以是一个以上的数字(在这种情况下,它不能以0开头)。
如果在小数点符号之前存在任何数字,则小数点及其后的数字是可选的。否则,必须使用小数点后跟至少一位数字。请注意,小数点后允许多个尾随0。
grep -E '^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$'
正确匹配以下内容:
9
0
10
10.
0.
0.0
0.100
0.10
0.01
10.0
10.10
.0
.1
.00
.100
.001
以及它们的签名等效项,而它拒绝以下内容:
.
00
01
00.0
01.3
及其已签名的等价物以及空字符串。
您的要求已经得到回答,因此这对于那些只输入2个小数位(如果输入了可选的小数点)的人来说只是一个附加信息:
^\d+(\.\d{2})?$
^:字符串的开头
\ d:一个数字(等于[0-9])
+:一个且无限制的次数
捕获组(。\ d {2})?
?:零一倍。:字符。
\ d:一个数字(等于[0-9])
{2}:正好2倍
$:字符串的结尾
1:匹配
123:匹配
123.00:匹配
123 .:不匹配
123 ..:不匹配
123.0:不匹配
123.000:不匹配
123.00.00:不匹配
在Perl中,使用Regexp :: Common,它将使您可以为特定的数字格式组装经过微调的正则表达式。如果您不使用Perl,则生成的正则表达式通常仍可被其他语言使用。
在Regexp :: Common :: Number中打印生成示例正则表达式的结果:
$ perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))