在perl脚本中的" - "之前从字符串数组中提取所有出现的字符串

use*_*025 3 perl

我需要在之前提取所有字符串 - *,
例如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)

Sob*_*que 7

你很亲密

您不需要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.