从“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是一个不错的选择,