0

我尝试了几种不同的正则表达式变体,但我仍然无法$found返回结果。我已经在 regexterster.com 上测试了这些正则表达式,结果显示与@domains.

我怀疑我在这里犯了一个非常愚蠢的错误:

use strict;
use warnings;

my @domains = ('apples.eat-healthy.com', 'seeds.for-parrots.co.nz', 'spam.sender.info');

my $domain_patterns = qr/
    [A-Z0-9-]+\.[A-Z0-9]{3}$|
    [A-Z0-9-]+\.[A-Z0-9]{2}\.[A-Z0-9]{2}$|
    [A-Z0-9-]+\.[A-Z0-9]{4}$
    /x;

foreach my $domain (@domains) {
    if (my ($found) = $domain =~ m/($domain_patterns)/i) {
        print "Found: $found\n";
    }
}

有人可以指出我做错了什么吗?

4

2 回答 2

3

/i需要在qr//.

我认为这可以通过示例来最好地解释:

my $re1 = qr/B/i;
my $re2 = qr/C/;

/A$re1$re2/i

# ABC   matches
# aBC   matches (Because of /i on /A/i)
# AbC   matches (Because of /i on qr/B/i)
# ABc   doesn't match (C must be uppercase because of lack of /i on qr/C/)
于 2013-07-08T14:28:52.387 回答
3

添加不区分大小写的修饰符或将表达式更改为:

[A-Za-z0-9\-]+\.[A-Za-z0-9]{3}$|
[A-Za-z0-9\-]+\.[A-Za-z0-9]{2}\.[A-Za-z0-9]{2}$|
[A-Za-z0-9\-]+\.[A-Za-z0-9]{4}$
于 2013-07-08T14:30:08.270 回答