Regex 可以使用正则表达式在Perl中对一组整词进行通配符吗?

Regex 可以使用正则表达式在Perl中对一组整词进行通配符吗?,regex,perl,wildcard,matching,words,Regex,Perl,Wildcard,Matching,Words,这是胡说八道,我是说伪代码,但类似这样: /[一月、二月、三月]\d*/ 应该匹配像1月13日或2月26日这样的事情,等等 我在做什么: my $url0 = 'http://www.registrar.ucla.edu/calendar/acadcal13.htm'; my $url1 = 'http://www.registrar.ucla.edu/calendar/acadcal14.htm'; my $url2 = 'http://www.registrar.ucla.edu/cale

这是胡说八道,我是说伪代码,但类似这样:

/[一月、二月、三月]\d*/

应该匹配像1月13日或2月26日这样的事情,等等


我在做什么:

my $url0 = 'http://www.registrar.ucla.edu/calendar/acadcal13.htm';
my $url1 = 'http://www.registrar.ucla.edu/calendar/acadcal14.htm';
my $url2 = 'http://www.registrar.ucla.edu/calendar/acadcal15.htm';
my $url3 = 'http://www.registrar.ucla.edu/calendar/acadcal16.htm';
my $url4 = 'http://www.registrar.ucla.edu/calendar/acadcal17.htm';
my $url5 = 'http://www.registrar.ucla.edu/calendar/sumcal.htm';

my $document0 = get($url0);
my $document1 = get($url1);
my $document2 = get($url2);
my $document3 = get($url3);
my $document4 = get($url4);
my $document5 = get($url5);

my @dates0 = ($document0 =~ /(January|February|March|April|May|June|July|August|September|October|November|December) \d+/g);
my @dates1 = ($document1 =~ /(January|February|March|April|May|June|July|August|September|October|November|December) \d+/g);
my @dates2 = ($document2 =~ /(January|February|March|April|May|June|July|August|September|October|November|December) \d+/g);
my @dates3 = ($document3 =~ /(January|February|March|April|May|June|July|August|September|October|November|December) \d+/g);
my @dates4 = ($document4 =~ /(January|February|March|April|May|June|July|August|September|October|November|December) \d+/g);
my @dates5 = ($document5 =~ /(January|February|March|April|May|June|July|August|September|October|November|December) \d+/g);

foreach(@dates0)
{
    print "$_\r\n";
}

foreach(@dates1)
{
        print "$_\r\n";
}

foreach(@dates2)
{
        print "$_\r\n";
}

foreach(@dates3)
{
        print "$_\r\n";
}

foreach(@dates4)
{
        print "$_\r\n";
}

foreach(@dates5)
{
        print "$_\r\n";
}
这些打印小工具会产生以下结果: 这是不好的:

是的。你可以使用

我会那样做的

如果数组中已经有它们,则可以更改变量
$LIST\u SEPARATOR
,将它们串成一个替代变量。然后用括号括起来

use English qw<$LIST_SEPARATOR>; # In line-noise: $"
my $date_regex
    = do { local $LIST_SEPARATOR = '|';
           qr/(?:@months) \d*/ # ?: if you don't want the capture
         };
使用英语qw;#在线噪音:$”
我的$date\u regex
=do{local$LIST_分隔符='|';
qr/(?:@months)\d*/#?:如果您不想捕获
};
这将为您提供一个编译后的表达式,您可以像这样重用它:

    my @dates;
while ( my $url = <DATA> ) { 
    my $document = get( $url );
    push @dates, [ $document =~ /($date_regex)/g ];
    push @dates, $date;
}
__DATA__
http://www.registrar.ucla.edu/calendar/acadcal13.htm
http://www.registrar.ucla.edu/calendar/acadcal14.htm
http://www.registrar.ucla.edu/calendar/acadcal15.htm
http://www.registrar.ucla.edu/calendar/acadcal16.htm
http://www.registrar.ucla.edu/calendar/acadcal17.htm
http://www.registrar.ucla.edu/calendar/sumcal.htm
my@日期;
而(我的$url=){
my$document=get($url);
推送@dates,[$document=~/($date\u regex)/g];
推送@dates,$date;
}
__资料__
http://www.registrar.ucla.edu/calendar/acadcal13.htm
http://www.registrar.ucla.edu/calendar/acadcal14.htm
http://www.registrar.ucla.edu/calendar/acadcal15.htm
http://www.registrar.ucla.edu/calendar/acadcal16.htm
http://www.registrar.ucla.edu/calendar/acadcal17.htm
http://www.registrar.ucla.edu/calendar/sumcal.htm

要从中获取所有日期并将其放入数组中。为什么要这样做?使用DOM获取日期所在的每个TD元素。尝试执行类似于
my$document0=get($url0);
然后
my$dates0=($document=~/不管它是什么/g)
@stackErr,我不知道如何做这个DOM业务。第一次键入Perl.read在这里介绍如何从DOM中获取节点:您的替代选项给出了这样的结果:即,当我打印出每个数组的内容时。@user3269763,看不到粘贴箱。因此我不确定您的问题是什么。它没有捕获日期。它只捕获月份。@user3269763,我不知道你想做什么。它符合你想要的顺序。它还回答“你是否可以通配符一整套单词。”“。我做了一个更改,在月份周围使用了分组括号,在要捕获的整个表达式周围使用了捕获。当您进行全局匹配时,它只是收集重复的捕获,即使匹配,它也不会自动捕获字符串的一部分。请参见OP底部的图像。
    my @dates;
while ( my $url = <DATA> ) { 
    my $document = get( $url );
    push @dates, [ $document =~ /($date_regex)/g ];
    push @dates, $date;
}
__DATA__
http://www.registrar.ucla.edu/calendar/acadcal13.htm
http://www.registrar.ucla.edu/calendar/acadcal14.htm
http://www.registrar.ucla.edu/calendar/acadcal15.htm
http://www.registrar.ucla.edu/calendar/acadcal16.htm
http://www.registrar.ucla.edu/calendar/acadcal17.htm
http://www.registrar.ucla.edu/calendar/sumcal.htm