Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于匹配带或不带前导零的小数的正则表达式_Regex - Fatal编程技术网

Regex 用于匹配带或不带前导零的小数的正则表达式

Regex 用于匹配带或不带前导零的小数的正则表达式,regex,Regex,我不太懂正则表达式。 上面的正则表达式不允许输入。2.但它允许所有其他小数,如0.2、0.02等。我需要让这个表达式允许像.2、.06等这样的数字……只需将[0]之后的+更改为ansterisk`*': 因此,与其在点之前允许一个或多个零,不如允许0或多个。我喜欢这个用于浮点数的regexp,它非常聪明,因为它不会将0.0作为一个数字匹配。它要求周期两边至少有一个非零数字。我想我可以将它分成几个部分来提供更深入的理解它的g ^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\

我不太懂正则表达式。
上面的正则表达式不允许输入。2.但它允许所有其他小数,如0.2、0.02等。我需要让这个表达式允许像.2、.06等这样的数字……

只需将
[0]
之后的
+
更改为ansterisk`*':


因此,与其在点之前允许一个或多个零,不如允许0或多个。

我喜欢这个用于浮点数的regexp,它非常聪明,因为它不会将
0.0
作为一个数字匹配。它要求周期两边至少有一个非零数字。我想我可以将它分成几个部分来提供更深入的理解它的g

^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$
regexp内部有两个较小的模式,第一个模式匹配数字>=1的情况(至少有一个非零字符)。可选地,允许一个或多个尾随数字的周期。第二个模式匹配我将使用此模式:

/^(\d*[1-9]\d*(\.\d+)?|0*\.\d*[1-9]\d*)$/
这允许数字表达式以任意一个开头

  • 某些数字,后跟可选的小数位数,或
  • 只有小数位数
允许的:

^(?:(?:0|[1-9][0-9]*)(?:\.[0-9]*)?|\.[0-9]+)$
但不是:

123
123.
123.45
.12345
替换为:

.
01234
甚至更短:

^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$

您也可以使用以下简单表达式:

^(\d*[1-9]\d*(\.\d+)?|[0]*\.\d*[1-9]\d*)$

刚刚计划发布:)^([0-9]*[1-9][0-9]*(\.[0-9]+)?[0]*\.[0-9]*[1-9][0-9]*)$这是最相关的。谢谢@Joey的解释。顺便说一句:为了避免前导零,删除第一个[0-9]*提供的原始regexp也不允许任何等于0的内容…您的丢失了它
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$
^(\d*[1-9]\d*(\.\d+)?|[0]*\.\d*[1-9]\d*)$
^[-+]?\d*(\.\d+)?$