perl->在一行中存在的多个元字符之间打印字符

我正在尝试一个脚本来找出元字符“ |”之间的字符。我试图获得第一个和后续“ |”的位置元字符,并尝试在这两个位置之间打印字符串。下面是我尝试过的代码:

文件:| A | B |计数| D | E |

预期输出:A B计数D E

if($line =~ /\|/) 
{
while ($line =~ m/\|/g) 
{
my $start_pos = $-[0]; 
my $end_pos = $+[0]; 
my $hit_pos = "$start_pos - $end_pos";
my $char = substr($line,$start_pos,$end_pos);
if($char =~/\w/){
  print "$char\n";
}
}
}
asdqq 回答:perl->在一行中存在的多个元字符之间打印字符

使用split

my $line = '| A| B| Count| D| E|';

my @fields = split(/\|/,$line,-1);
shift(@fields);  # Ignore stuff before first "|"
pop(@fields);    # Ignore stuff after last "|"

say "<$_>" for @fields;

输出:

< A>
< B>
< Count>
< D>
< E>

使用正则表达式匹配:

my $line = '| A| B| Count| D| E|';

my @fields = $line =~ / \| ([^|]*) (?=\|) /xg;

say "<$_>" for @fields;

输出:

< A>
< B>
< Count>
< D>
< E>

使用正则表达式匹配(替代):

my $line = '| A| B| Count| D| E|';

while ($line =~ / \| ([^|]*) (?=\|) /xg) {
   say "<$1>";
}

输出:

< A>
< B>
< Count>
< D>
< E>
,

最简单的操作可能就是删除管道。

$line =~ s/\Q|\E//g;
本文链接:https://www.f2er.com/2718747.html

大家都在问