如何创建一个只匹配Perl中的数字和小数分隔符的正则表达式

时间:2013-11-27 01:35:50

标签: regex perl

我想要一个拒绝包含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

2 个答案:

答案 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*

之类的东西相匹配