我需要在之前提取所有字符串 - *,
例如100002098和0004184022以及66680和1247764以及843804并附加到网址"www.xyz.com/mystring"
为此,我写了下面的perl代码,但我在正则表达式中缺少一些东西,任何人都可以帮助我
my @str = ("100002098-2","0004184022-2","66680-2","1247764-2", "843804-0");
foreach my $arr(@str){
if($arr =~ s/-.*//sr){
#url = append(url+$arr);
print $arr. "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
你很亲密
您不需要sr作为正则表达式修饰符.我不得不去看看做了什么r:
r - 执行非破坏性替换并返回新值
http://perldoc.perl.org/perlre.html#Modifiers
在这种情况下,这将意味着你的'if'语句正在测试正则表达式的结果,但你实际上并没有改变你的$arr.*
s 看起来也无关紧要,但不是造成问题的原因:
s将字符串视为单行.也就是说,改变"." 匹配任何字符,甚至是换行符,通常它不匹配.
所以这应该工作:
my @str = ("100002098-2","0004184022-2","66680-2","1247764-2", "843804-0");
foreach my $arr(@str){
if($arr =~ s/-.*//){
print $arr. "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
另外 - 附加在perl中完成..
例如print $url.$arr或只是字符串化:print "$url/$arr\n";
*为了您的兴趣,您可以r在正则表达式上使用修饰符:
my @str = ("100002098-2","0004184022-2","66680-2","1247764-2", "843804-0");
foreach my $arr(@str){
if(my $new_arr = $arr =~ s/-.*//sr){
print $new_arr. "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
但我建议这是多余的,除非你特别想保留旧的价值$arr.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |