1. ホーム
  2. php

[解決済み] datetime (2008-09-01 12:35:45 ) の正規表現パターンは何ですか?

2022-02-10 05:12:31

質問

DateTime (2008-09-01 12:35:45 ) の RegEx パターンは何ですか?

このエラーが発生します。

終了デリミタ '^' が見つかりません

使用しています。

preg_match('(?n:^(?=\d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(?(.0?2)(?=.{3,4}(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))|0?[1-9]|1\d|2[0-8])(?<sep>[/.-])(?<month>0?[1-9]|1[012])\2(?<year>(1[6-9]|[2-9]\d)\d{2})(?:(?=\x20\d)\x20|$))?(?<time>((0?[1-9]|1[012])(:[0-5]\d){0,2}(?i:\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$)', '2008-09-01 12:35:45');

このようなエラーが発生します。

Warning: preg_match() [function.preg-match]: Compilation failed: Nothing to repeat at offset 0 in E:\wwwindex.php on line 19

解決方法は?

エスポ:ただ、正規表現ってすごいですよね。例えば、ユーザーが入力した日時を実際に調べたい場合など、マッチした内容で何か便利なことをするコードを書かなければならないのは嫌ですね。

Tomのソリューションの方が何億倍もシンプルで、括弧を追加すればユーザーが入力した値を簡単に取得できるので、より説得力があるように思います。

(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})

もし、perlを使っているなら、こんな感じで値を取り出せます。

$year = $1;
$month = $2;
$day = $3;
$hour = $4;
$minute = $5;
$second = $6;

他の言語でも同様の機能があるはずです。ただし、一桁の月などの値を受け入れたい場合は、正規表現に若干の修正を加える必要があることに注意してください。