Perl - Regex只提取以逗号分隔的字符串

per*_*ser 4 regex perl split comma www-mechanize

我有一个问题,我希望有人可以帮助......

我有一个包含网页内容的变量(使用WWW :: Mechanize抓取).

该变量包含以下数据:

$var = "ewrfs sdfdsf cat_dog,horse,rabbit,chicken-pig"
$var = "fdsf iiukui aawwe dffg elephant,MOUSE_RAT,spider,lion-tiger hdsfds jdlkf sdf"
$var = "dsadp poids pewqwe ANTELOPE-GIRAFFE,frOG,fish,crab,kangaROO-KOALA sdfdsf hkew"
Run Code Online (Sandbox Code Playgroud)

我从上面的例子中感兴趣的唯一一点是:

@array = ("cat_dog","horse","rabbit","chicken-pig")
@array = ("elephant","MOUSE_RAT","spider","lion-tiger") 
@array = ("ANTELOPE-GIRAFFE","frOG","fish","crab","kangaROO-KOALA")
Run Code Online (Sandbox Code Playgroud)

我遇到的问题:

我试图只从变量中提取逗号分隔的字符串,然后将它们存储在一个数组中供以后使用.

但是,确保我在逗号分隔动物列表的开头(即cat_dog)和结尾(即鸡 - 猪)获得字符串的最佳方法是什么,因为它们没有前缀/后缀逗号.

此外,由于变量将包含网页内容,因此不可避免的是,可能还存在逗号立即由空格和另一个单词继承的情况,因为这是在段落和句子中使用逗号的正确方法...

例如:

Saturn was long thought to be the only ringed planet, however, this is now known not to be the case. 
                                                     ^        ^
                                                     |        |
                                    note the spaces here and here
Run Code Online (Sandbox Code Playgroud)

我对逗号后跟空格的任何情况都不感兴趣(如上所示).

我只对逗号之后没有空格的情况感兴趣(即cat_dog,horse,rabbit,chicken-pig)

我尝试了很多方法,但是无法找到构建正则表达式的最佳方法.

Mik*_*keM 8

怎么样

[^,\s]+(,[^,\s]+)+
Run Code Online (Sandbox Code Playgroud)

它将匹配一个或多个不是空格或逗号[^,\s]+后跟逗号的字符以及一个或多个不是空格或逗号的字符,一次或多次.

进一步评论

要匹配多个序列,请添加g用于全局匹配的修饰符.
以下将每个匹配拆分$&为a ,并将结果推送到@matches.

my $str = "sdfds cat_dog,horse,rabbit,chicken-pig then some more pig,duck,goose";
my @matches;

while ($str =~ /[^,\s]+(,[^,\s]+)+/g) {
    push(@matches, split(/,/, $&));
}   

print join("\n",@matches),"\n";
Run Code Online (Sandbox Code Playgroud)