1

私は現在問題に苦しんでいます: 特定の文字列内で (不明な形式の) 日付を見つけようとしています。dd.mm.yyyyこれまでのところ、ドイツの日付 ( )のソリューションを実装しました。

if(preg_match('/\d{2}.\d{2}.\d{4}/',$stringWithDateSomewhere, $date)) {
  $result['date'] = date('Y-m-d', strtotime($date[0]));
}

最も一般的なものに一致するように、いくつかの reg 式を追加し続けることができます。問題は、ドイツの日付だけをチェックする必要がないため、チェックするフォーマットが多すぎることです。

iPhone が電子メールや Web サイトで行うように、文字列内の日付を検索するための PHP クラスまたは関数はありますか?

$stringWithDateSomewhere:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus elit, 
dictum quis justo sit amet, sollicitudin malesuada velit. Nunc eget 
tempus ipsum. *19.10.2013* Morbi bibendum vitae lorem non euismod. In 
hac habitasse platea dictumst. Curabitur *2nd February 2011* vitae pellentesque dui,mi.
4

2 に答える 2

3

説明

この式は、サンプル テキストにある 2 つの形式をキャプチャします。これは、有効な日付であることを確認するために文字列をチェックしません。

  • 31.43.20132 つの区切り文字が文字や数字ではなく、同一である場合のような形式に一致します
  • 2nd February 2011数字、月、4 桁の文字列があるような形式に一致します

\d{1,4}([^a-z0-9])\d{1,4}\1\d{1,4}|\d(st|nd|rd|th)?\s?(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\b\s?\d{4}

ここに画像の説明を入力

PHP コード例:

入力テキスト

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus elit, 
dictum quis justo sit amet, sollicitudin malesuada velit. Nunc eget 
tempus ipsum. *19.10.2013* Morbi bibendum vitae lorem non euismod. In 
hac habitasse platea dictumst. Curabitur *2nd February 2011* vitae pellentesque dui,mi.

コード

<?php
$sourcestring="your source string";
preg_match_all('/\d{1,4}([^a-z0-9])\d{1,4}\1\d{1,4}|\d(?:st|nd|rd|th)?\s?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\b\s?\d{4}/im',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

マッチ

$matches Array:
(
    [0] => Array
        (
            [0] => 19.10.2013
            [1] => 2nd February 2011
        )

    [1] => Array
        (
            [0] => .
            [1] => 
        )

)

免責事項

この式では見つからない特殊なケースがたくさんあります。この式が検出されると、追加の形式に一致するように更新できます。

式は、実際には日付ではないものもキャプチャする場合がありますが、これは正常です。

于 2013-06-21T16:13:27.123 に答える
0

テキスト内の日付を検出することを計画しているので、正規表現が答えだと思います。さまざまな形式の日付を検出するには、式を手動で追加する必要があります。new DateTime($date)非常にうまく機能しますが、すでに日付であることがわかっているテキストを入力する必要があります。

于 2013-06-21T14:43:30.023 に答える