perl --> 在一行中出现的多个元字符之间打印字符
perl --> printing characters in between the multiple metacharacters present in a single line
我正在尝试一个脚本来找出元字符“|”之间的字符。我试图获得第一个和随后的“|”的位置元字符并尝试打印这两个位置之间的字符串。下面是我试过的代码:
文件:|一个|乙|计数| 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";
}
}
}
使用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 "<>";
}
输出:
< A>
< B>
< Count>
< D>
< E>
最简单的方法可能就是删除管道。
$line =~ s/\Q|\E//g;
我正在尝试一个脚本来找出元字符“|”之间的字符。我试图获得第一个和随后的“|”的位置元字符并尝试打印这两个位置之间的字符串。下面是我试过的代码:
文件:|一个|乙|计数| 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";
}
}
}
使用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 "<>";
}
输出:
< A>
< B>
< Count>
< D>
< E>
最简单的方法可能就是删除管道。
$line =~ s/\Q|\E//g;