从“quot”之前的字符串数组中提取所有出现的字符串-&引用;在perl脚本中

从“quot”之前的字符串数组中提取所有出现的字符串-&引用;在perl脚本中,perl,Perl,我需要提取-*, e、 g.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

我需要提取-*,
e、 g.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";  
    }  
}

我将使用split将每个元素分隔成一个数组,其中包含
$split[0]
-
前面的字符和
$split[1]
后面的字符。 然后你可以把这些打印出来。我在打印后包含了一个if语句,仅当
$split[0]
$split[1]
都存在时才打印数字

#!/usr/bin/perl
use warnings;
use strict; 

my @str = qw(100002098-2 0004184022-2 66680-2 1247764-2 843804-0 1234 -5678);  
foreach (@str){
    my @split = split(/-/);
    print "$split[0]\n" if $split[0] and $split[1];
}
你很接近

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

r-执行无损替换并返回新值

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

s
看起来也无关紧要,但这不是问题的根源:

将字符串视为单行。也就是说,将“.”更改为匹配任何字符,即使是换行符,通常都不匹配

因此,这应该是可行的:

my @str = ("100002098-2","0004184022-2","66680-2","1247764-2", "843804-0");  
foreach my $arr(@str){  
    if($arr =~ s/-.*//){  
        print $arr. "\n";  
    }  
}
另外,perl中的附加是通过
完成的

例如,
打印$url.$arr
或只是串接:
打印“$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
的旧值

只是因为做这件事的方法总是不止一种。如果您不想更改$arr。此代码

my @str = ("100002098-2","0004184022-2","66680-2","1247764-2", "843804-0");  
foreach my $arr(@str){  
    if($arr =~ m/(.*)-.*/){  
        print "untouched: ". $arr. "\n";  
        print "extracted: " .$1. "\n";  
    }  
}
。。。给你

untouched: 100002098-2
extracted: 100002098
untouched: 0004184022-2
extracted: 0004184022
untouched: 66680-2
extracted: 66680
untouched: 1247764-2
extracted: 1247764
untouched: 843804-0
extracted: 843804

什么是
append
功能?不要带走/s;如果在-,之后有一条新线,它肯定是需要的。如果-是第一个字符,则使用/r的建议与不使用/r的建议的效果不同。公平点。我主要关注的是提供的源数据,但是一些不同格式的测试用例是相关的;我的$url=($urluncomplete.$arr);打开浏览器($url);谢谢,split在perl脚本中工作,对于其他脚本,regex是一个不错的选择,