gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:24:01 25 4
gpt4 key购买 nike

我需要提取-*之前的所有字符串,
例如100002098 和 0004184022 和 66680 和 1247764 和 843804 并附加到 url “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";
}
}

最佳答案

你已经接近了。

您不需要 sr 作为正则表达式修饰符。我不得不去看看 r 做了什么:

r - perform non-destructive substitution and return the new value

http://perldoc.perl.org/perlre.html#Modifiers

在这种情况下,这意味着您的“if”语句正在测试正则表达式的结果,但您实际上并没有更改您的 $arr.*

s 看起来也无关紧要,但这不是导致您的问题的原因:

s Treat string as single line. That is, change "." to match any character whatsoever, even a newline, which normally it would not match.

所以这应该有效:

my @str = ("100002098-2","0004184022-2","66680-2","1247764-2", "843804-0");  
foreach my $arr(@str){
if($arr =~ s/-.*//){
print $arr. "\n";
}
}

另外 - 在 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";
}
}

但我建议这是多余的,除非你特别想保留 $arr 的旧值。

关于perl - 从 perl 脚本中 "-"之前的字符串数组中提取所有出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com