Regex 用于匹配特定十进制数的正则表达式

Regex 用于匹配特定十进制数的正则表达式,regex,Regex,我需要验证用户输入的答案是否适用于在线测验 答案应该是一个十进制数,可以用多种不同的方式输入。比如说, 0.666666... 可以匹配 .66 .67 .66666 .667 0.6667 等等 基本上,我想忽略舍入、精度和前面的零。我找到的示例是用于匹配任何十进制数的 谢谢 RT 编辑- 我正在为WebCT写一个测验。它允许三个选项来匹配正确答案:“等于”、“包含”和“正则表达式”。我相信WebCT是基于Java的。但我不能确定它使用的正则表达式的风格。我可以要求用户提供不超过小数点

我需要验证用户输入的答案是否适用于在线测验

答案应该是一个十进制数,可以用多种不同的方式输入。比如说,

0.666666... 
可以匹配

.66
.67
.66666
.667
0.6667 
等等

基本上,我想忽略舍入、精度和前面的零。我找到的示例是用于匹配任何十进制数的

谢谢

RT

编辑-

我正在为WebCT写一个测验。它允许三个选项来匹配正确答案:“等于”、“包含”和“正则表达式”。我相信WebCT是基于Java的。但我不能确定它使用的正则表达式的风格。我可以要求用户提供不超过小数点后三位的正确答案。在这种情况下,正确答案可以是以下四种答案之一: 0.666 0.667 .666
.667

听起来您不需要正则表达式。它们纯粹是文本,没有“可以用多种方式表示的十进制数”的概念


我认为您应该做的是将用户的答案转换为使用任何编程语言的浮点数据类型,然后从正确的答案中减去它。结果是学生的答案有误。如果结果小于某个阈值,比如说0.06,那么考虑它是正确的。这样,0.6、0.66、0.667、0.6667等都将被认为是正确的。

听起来您不需要正则表达式。它们纯粹是文本,没有“可以用多种方式表示的十进制数”的概念


我认为您应该做的是将用户的答案转换为使用任何编程语言的浮点数据类型,然后从正确的答案中减去它。结果是学生的答案有误。如果结果小于某个阈值,比如说0.06,那么考虑它是正确的。这样,0.6、0.66、0.667、0.6667等都将被认为是正确的。

/^0*\.6+7.*$/

细分:


^0*
/^0*\.6+7?\.*$/

细分:


^0*
您最好简单地将用户输入的字符串转换成一个数字(使用您拥有的任何语言工具,lke C的
atof
),然后确保它足够接近(在设定的误差范围内),甚至指定最小值和最大值(例如0.6和0.67)

但是,如果你真的想要一个正则表达式:

^0*\.6+7?$
应该为那个特定的数字做这个把戏

这是多个
0
中的零,后跟
,然后是一个或多个
6
字符和可选的
7

要按照注释中的要求强制执行至少两位小数,可以使用:

^0*\.6+[67]$

这迫使它以
6
7
结尾,并在前面有一个或多个
6
字符。

您最好将用户输入的字符串转换为一个数字(使用您拥有的任何语言工具,lke C的
atof
),然后确保它足够接近(在设定的误差范围内),甚至通过指定最小值和最大值(例如0.6和0.67)

但是,如果你真的想要一个正则表达式:

^0*\.6+7?$
应该为那个特定的数字做这个把戏

这是多个
0
中的零,后跟
,然后是一个或多个
6
字符和可选的
7

要按照注释中的要求强制执行至少两位小数,可以使用:

^0*\.6+[67]$

这迫使它以一个
6
7
结尾,前面有一个或多个
6
字符。

对于分数的十进制表示,你有一个很好的标准形式:它将由一个有限的十进制数组成,后跟一个无限重复的十进制数字序列。例如,1/7是“0”后面是“142857”的无限多次重复。有一种感觉(见下文),即这些分数十进制表示是唯一可以用正则表达式表示的

这方面的技术是用一棵树来表示这些,其中基本部分是一系列可选的括号表达式,还有表示四舍五入的替代方法,因此8.19将被赋予
8(((2 |(19?)?)
),然后重复部分加上星号,然后是一个部分,给出重复部分可能被四舍五入的所有方式

例如:1/7由
0?(142857)*(1(4)(3 | 2)(8(6 | 57?)
给出

在一边 正则表达式只能表示分数的意义如下。假设一个形式表达式描述一个十进制表示,如果它的语言都是数字的有限十进制前缀,那么2/3的表达式的语言必须是0、0.6、0.66、0.666和c。一个只接受t中前缀的有限状态机他的方式必须重复,因此是一个分数


所以没有正则表达式可以接受,比如说
sqrt(2)

对于分数的十进制表示,你有一个很好的标准形式:它将由一个有限的十进制数字组成,后面是一个无限重复的十进制数字序列。例如,1/7是“0”。后面是无限多的“142857”重复。这是有意义的(见下文),其中这些分数十进制表示是唯一可以用正则表达式表示的

这方面的技术是用一棵树来表示这些,其中基本部分是一系列可选的括号表达式,还有表示四舍五入的替代方法,因此8.19将被赋予
8(((2 |(19?)?)
),然后重复部分加上星号,然后是一个部分,给出重复部分可能被四舍五入的所有方式

例如:1/7由
0?(142857)*(1(4)(3 | 2)(8(6 | 57?)
给出

在一边 正则表达式只能表示分数的含义如下:如果一个形式表达式的语言都是有限d,那么它描述的是十进制表示