1

正規表現を使用して、テキスト ファイルからさまざまな形式の年のセットを識別して引き出すスクリプトを作成しています。問題のコードは次のとおりです。

if ($parts[0] =~ /^\(*(\d\d\d\d)\)*$/) {
    # Matches a single 4 digit date in parentheses such as (1979)
    $start = $1;
    $end = $1;
} 
elsif ($parts[0] =~ m{\d\d\d\d\/\d\d\d\d} ) {
    # Matches cases like 1948/1972
    warn "Found a $1";
    #do some other stuff
}

私が直面している問題は、 の式に一致する日付を見つけたelsif$1、値を保持していないことです。つまり"Found a "メッセージを何度も出力しますが、 の値はありません$1。ここで私が間違っていることを教えてもらえますか? ばかげた間違いでしたら申し訳ありません。

ありがとう!

4

2 に答える 2

1

with in part()を実際に使用する前に、with の一致をキャプチャする必要があります。$1elsif

さらに、正規表現は次のように短縮できます。

if ($parts[0] =~ /^\(*(\d{4})\)*$/) {
    # Matches a single 4 digit date in parentheses such as (1979)
    $start = $end = $1;
} 
elsif ($parts[0] =~ /^(\d{4}\/\d{4})$/ ) {
    # Matches cases like 1948/1972
    warn "Found a $1";
    #do some other stuff
}
于 2013-11-07T22:19:08.337 に答える