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