Perlについての質問箱 14箱目
■ このスレッドは過去ログ倉庫に格納されています
0034デフォルトの名無しさん
NGNG$date1 = '(?:(\d+)[-/.](\d?\d)[-/.](\d?\d))';
$date2 = '(?:(\d\d\d\d)(\d\d)(\d\d))';
$time1 = '(?:(\d?\d)\:(\d?\d)\:(\d?\d))';
$time2 = '(?:(\d\d)(\d\d)(\d\d))';
$regex = "^(?:$date1|$date2)(?:\\s+(?:$time1|$time2))?\$";
@dateval = $targetstr =~ m%$regex%;
ここで言う「日時っぽぃ文字列」とは
●日付部
・区切り文字「-/.」があれば桁揃え不要…710/3/10等
・区切り文字なしなら8桁固定…20041129等
●時間部
・区切り文字「:」があれば桁揃え不要…1:1:1等
・区切り文字なしなら6桁固定…235959等
という定義で、日付部と時間部は1つ以上のスペースで区切って
時間部は省略可とし、日時としての妥当性チェックは
正規表現だけだと閏年判定等で大変なのでこの後の処理で行う予定です。
で、上記コードでマッチング自体はできるのですが、
@dateval[3 .. 5]に何かがキャプチャされてしまいます。
@datevalは年,月,日,時,分,秒になるようにしたつもりなんですがこれはなんでしょうか?
#ActivePerl 5.8.3で確認
あるいは他にいい正規表現があれば教えてください。
■ このスレッドは過去ログ倉庫に格納されています