ここには2つの異なるテキスト形式があります。
"Submitted on Oct 1st, 2013"
"Not started"
ステータスと日付を削除したい。
期待される結果は次のとおりです。
$status = "Submitted" or "Not started"
$date = "Oct 1st, 2013"
で行う方法Perl
。どうもありがとう。
日付の前に常に「on」という単語があると仮定できる場合、これを実行するコードは次のとおりです。
#!/usr/bin/perl
use strict;
use warnings;
chomp(my $input = <STDIN>);
my $status = "Not started";
my $date;
if ($input =~ / on /) {
$date = $';
$status = "Submitted";
}
print "Status: $status\n";
if (defined $date) {
print "Date: $date\n";
}
単一の正規表現から始まるアプローチ。予期しない入力を処理します。
#!/usr/bin/perl -w
use strict;
use warnings;
my ($match, $status, $date);
foreach (<DATA>) {
$_ =~ /^"(Submitted)(?: on )(.*)"|(Not started)"/;
# ^^^^^^^^^ ^^ ^^^^^^^^^^^
# $1 $2 $3
if (defined $1) {
($match, $status, $date) = ("Y", $1, $2);
} elsif (defined $3) {
($match, $status, $date) = ("Y", $3, "-");
} else {
($match, $status, $date) = ("N", "-", "-");
}
print "[", join("][", ($match, $status, $date)), "]\n";
}
__DATA__
"Submitted on Oct 1st, 2013"
"Not a match!"
"Not started"
このプログラムは次の出力を生成します。
[Y][Submitted][Oct 1st, 2013]
[N][-][-]
[Y][Not started][-]