Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
浮点数的TCL regexp在个位数处失败_Regex_Tcl - Fatal编程技术网

浮点数的TCL regexp在个位数处失败

浮点数的TCL regexp在个位数处失败,regex,tcl,Regex,Tcl,我开发了以下regexp来捕获浮点数 ([+-]?[0-9]+\.?[0-9]+([eE][-+]?[0-9]+)?) 它适用于4.08955e-11或3.57等。现在,由于一个愚蠢的机会,我的解析器遇到了0,并失败了。我想我需要将小数点后的所有内容都设置为可选。但是我该怎么做呢?也许可以使用替代方案: {[-+]?(?:\y[0-9]+(?:\.[0-9]*)?|\.[0-9]+\y)(?:[eE][-+]?[0-9]+\y)?} 如果在小数点后加上所有字符(小数点本身是可选的),则可以匹

我开发了以下regexp来捕获浮点数

([+-]?[0-9]+\.?[0-9]+([eE][-+]?[0-9]+)?)

它适用于
4.08955e-11
3.57
等。现在,由于一个愚蠢的机会,我的解析器遇到了
0
,并失败了。我想我需要将小数点后的所有内容都设置为可选。但是我该怎么做呢?

也许可以使用替代方案:

{[-+]?(?:\y[0-9]+(?:\.[0-9]*)?|\.[0-9]+\y)(?:[eE][-+]?[0-9]+\y)?}

如果在小数点后加上所有字符(小数点本身是可选的),则可以匹配像
2这样的值。

请注意,您的正则表达式与单个数字不匹配,因为您与一个或多个数字匹配了2次
[0-9]+

如果您只想匹配浮点数或零,则可以使用替换,例如使用单词边界
\b

解释

  • [-+]?
    匹配可选+或-
  • \b
    单词边界
  • (?:
    非捕获组
    • [0-9]+\.[0-9]+
      匹配一个或多个数字点和一个或多个数字
    • (?:[eE][-+]?[0-9]+)?
      可选指数部分
    • |
    • 0
      逐字匹配
  • 关闭非捕获组
  • \b
    单词边界
要匹配不以点开头并且可以是一个或多个没有点的数字的浮点值,请使用:


与人们的想法相反,将每种可能形式的浮点数(包括NaN等)与仍然丢弃(例如,不可能的大数字或伪八进制)的可管理正则表达式相匹配是非常重要的

有一些关于通过使用单词边界来降低误报风险的想法,但请注意,这些边界与单词字符之间的边界相匹配(通常是字母数字和下划线)

scan命令允许简单可靠地验证和提取浮点数:

scan $number %f

是否允许使用以下格式的数字:
.357
?您的regexp至少需要2位数字。一个在
之前,一个在它之后,尽管
本身是可选的。如果搜索
[regex]浮点数
,您会发现许多示例。