【发布时间】:2020-09-18 09:20:13
【问题描述】:
我正在设置这个示例 Perl sn-p 来验证日期中的月份:
我想接受的一些场景是:
MM M
#!/usr/bin/perl
use strict;
use warnings;
my $pattern;
my $month = "(0[1-9]|1[012])";
my $day = "(0[1-9]|[12]\d|3[01])";
system("cls");
do {
print "Enter in a month: ";
chomp($pattern = <STDIN>);
# We only want to print if the pattern matches
print "Pattern matches\n" if ($pattern =~ /$month/);
} while ($pattern ne "Q");
当我运行它时,它会从 01-12 正确过滤,但是当我将正则表达式更改为:
$month = "(0?[1-9]|1[012])";
那么正则表达式允许 13、14 等...什么给出?
【问题讨论】:
-
(0?[1-0]|1[012]),正则表达式中的 [] 范围“1-0”无效。错别字?
-
我同意 Greg Hewgill 的回答,但你没有得到你想要的原因是因为你的正则表达式缺少元字符来告诉正则表达式匹配你的字符串的开头和结尾(即 ^ 和 $ )。就目前而言,它匹配字符串的任何部分。