我想要一个拒绝包含any的字符串的正则表达式 字母。但允许数字如:4,4.5,12.330而不是12.2.3.4(多个点)。
但为什么我的这个正则表达式失败了?
my $str1 = $ARGV[0] || "foo1";
if ($str1 =~ /^[\d+]|[^a-zA-Z]+|[\.]\d+$/) {
print "This is strictly numeric: $str1\n";
}
else {
print "This contain alphabet\n";
}
输入仍然传递我不想要的第一个条件。
在此处运行示例:https://eval.in/73654
答案 0 :(得分:5)
if ($str1 =~ /^\d+(?:\.\d+)?$/) { ... }
如果您还想允许以小数分隔符结尾且没有后跟数字的字符串,请使用
if ($str1 =~ /^\d+(?:\.\d*)?$/) { ... }
答案 1 :(得分:0)
我认为你需要围绕着你的事情:
if ( $str1 =~ /^([\d+]|[^a-zA-Z]+|[\.]\d+)$/ ) {
也
[^a-zA-Z]+
会匹配\d+
或\.\d+
的所有内容。
也
您可以简单地将第一个和最后一个词写为\.?\d+
但实际上,这不是你想要的,因为你也想要4.5与\d+\.?\d*