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)
我尝试了很多方法,但是无法找到构建正则表达式的最佳方法.
怎么样
[^,\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)