Perl中的GPA正则表达式

时间:2013-04-08 00:05:03

标签: regex perl

我正在尝试在Perl中制作GPA验证正则表达式,我的逻辑似乎有些问题。你应该能够结束一个0-3的数字,然后是a。在0-9范围内增加1位数。或者,如果第一个数字是4,则必须跟随.0这是我的代码:

$get_gpa_input =~ m/[0-3]\.\d[0-9]|[4].[0]/

4 个答案:

答案 0 :(得分:3)

m/(?: [0-3] [.] [0-9] ) | 4[.]0 /x

答案 1 :(得分:1)

删除[0-9]。你还有一些额外的括号,你应该在'4.0'中转义小数。

$get_gpa_input =~ m/[0-3]\.\d|4\.0/

答案 2 :(得分:1)

如果您正在进行验证,则不希望在字符串中搜索,而是强制整个字符串与正则表达式匹配;你通过在开头和结尾添加锚来做到这一点:

/\A (?: [0-3]\.[0-9] | 4\.0 ) \z/x

\A仅在字符串的第一个字符之前匹配,\z仅匹配字符串的最后一个字符。

避免在大多数代码中使用\d,因为它可以匹配任何数量的非0到9的Unicode“数字”(尽管在较新的perls中,/ a标志将其恢复为旧的ASCII含义)。

答案 3 :(得分:0)

你有\d[0-9],在0-3之后需要两个数字。您也不会在4替换中转义小数,这可能会有所不同。

[0-3]\.\d|4\.0