从Perl中的文件中拆分字符串

时间:2013-10-25 08:54:39

标签: perl split

所以,我有一个像这样的文件

Some.Text~~~Some big text with spaces and numbers and something~~~Some.Text2~~~Again some big test, etc~~~Text~~~Big text~~~And so on

我想要的是,如果$ x与Some.Text匹配,例如,我如何获得带有“带空格和数字等的大文本”的变量,或者如果它与“Some.Text2”匹配得到“再次”一些重大考验等。“

open FILE, "<cats.txt" or die $!;
while (<FILE>) {
chomp;
my @values = split('~~~', $_);
  foreach my $val (@values) {
    print "$val\n" if ($val eq $x)
  }

  exit 0;
}
close FILE;

从现在开始,我不知道该怎么做。我只是设法打印“Some.text”,如果它与我的变量匹配。

2 个答案:

答案 0 :(得分:2)

splice可用于从@values成对删除元素:

while(my ($matcher, $printer) = splice(@values, 0, 2)) {
    print $printer if $matcher eq $x;
}

或者,如果您需要保持@values完整,则可以使用c样式循环:

for (my $i=0; $i<@values; $i+=2) {
    print $values[$i+1] if $values[$i] eq $x;
}

答案 1 :(得分:1)

你最好的选择可能不是拆分,而是使用正则表达式,如下所示:

use strict;
use warnings;
use feature 'say';

while (<DATA>) {
    while (/Some.Text2?~~~(.+?)~~~/g) {
        say $1;
    }
}

__DATA__
Some.Text~~~Some big text with spaces and numbers and something~~~Some.Text2~~~Again some big test, etc~~~Text~~~Big text~~~And so on

<强>输出:

Some big text with spaces and numbers and something
Again some big test, etc