PHPを使用して長い文字列で日付を検索する

私は文書のコレクションを持っており、私はそれらの日付を引き出​​すことを試みています。彼らはプレーンテキストとHTMLがほとんどですが、それらはすべて英語の日付ですが、主に使用する日付形式です。長いテキスト列の中でこのような日付を見つけて解析するにはどうすればいいですか?

updated 2011-03-21T00:43:14
Sunday, March 20, 2011
Wednesday, March 16, 2011 | 11:25 AM
March 20, 2011 @ 12:21 pm
May 5, 2011
Published March 19, 2011
Some text here (March 19, 2011)
10/28/2011 21:16
ベストアンサー

今夜は少し時間があったので、私は数字のグループ分けを探していることを知って、いくつかの正規表現で遊んだ。以下はすべて下のすべての部分を解析します。また、foreachは単なる例です。正規表現は
preg_match_all()用に構築されているので、問題のない文字列からすべての日付を取り出すことができるはずです。

$str = 'updated 2011-03-21T00:43:14
Sunday, March 20, 2011
Wednesday, March 16, 2011 | 11:25 AM
March 20, 2011 @ 12:21 pm
May 5, 2011
Published March 19, 2011
Some text here (March 19, 2011)
10/28/2011 21:16
Author Name on Mar 17th 2011 ...
Location, ABBR., Jan. 8, 2008
01/07/2008 (6:00 pm)
Published under recent news one March 17, 2011. Now onto other things!
By Author Name and Company 03/19/2011 09:59
Posted by Author Name on March 16, 2011 at 03:20 PM EDT';

$months = array(
    'jan', 'january',
    'feb', 'febuary',
    'mar', 'march',
    'apr', 'april',
    'may',
    'june',
    'july',
    'aug', 'august',
    'sept', 'september',
    'oct', 'october',
    'nov', 'november',
    'dec', 'december',
);

header('Content-Type: text/plain');

foreach(explode( "n", $str) as $line)
{
    $line = str_replace(array('@', '|', '(', ')', 'at', 'on', 'am', 'pm'), '', mb_strtolower(trim($line)));

    if(preg_match('/([a-z]+[, .]+)?(d.+?)D*?$/m', $line, $match))
    {
        $date = '';

       //Is that word a valid month?
        if(in_array(trim($match[1], ',. '), $months))
        {
            $date = $match[1];
        }

        $date .= $match[2];

        if( ($date = strtotime($date)) !== false)
        {
            echo "Converted '" . $line . "' to '" . date( 'F jS, Y h:i:s A', $date) . "'n";
            continue;
        }
    }
    else
    {
        print "Failed to find anythingn";
    }

    echo "Could not parse line - '" . $line . "'n";//Need additional processing/regex here
}

これはちょっとハッキリした感じで、おそらく誰かがより良いパーサーで答えることができます。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です