2010-08-21 162 views
1

我想從輸入的任何字符串中提取日期。但不是具體的日期格式(否則我會使用某種形式的正則表達式)從字符串中提取日期

「的圖片在非洲採取3個星期前」

PHP解析器將extrace「3周以前「,​​我可以愉快地將其轉換。

有沒有人知道最好的方法來執行這個或任何圖書館,可以爲我做。我確定循環遍歷輸入中所有可能的字符串組合並不是一個好主意。

謝謝你們


佩卡取得了良好的點。

如果檢測到多個字符串與strtotime()函數一起使用,那麼我會對我的部分執行seom魔術。也許設計某種conetext算法。但我不指望你的隊友也必須擔心這一點。我非常高興能夠了解如何提取這個日期位。

更多示例上週

在阿爾伯特音樂廳演唱會。

拍攝5年前在與艾米莉的巴黎。

所有這些圖片我們

  • 東西一樣,在新的地方了真。
+0

我認爲這需要更多的例子。 '我3周前在非洲拍攝的照片會發生什麼事情? 「3周前我和我5年前出生的兒子在非洲拍攝的照片」? – 2010-08-21 11:42:42

+0

[解析日期在PHP中的字符串]可能的重複(http://stackoverflow.com/questions/3053580/parsing-a-string-for-dates-in-php) – Gordon 2010-08-21 12:18:24

回答

1

我把它用在你使用的strtotime。在這種情況下,爲什麼不解析字符串,並確定可能會生成有效時間的最長的令牌列表,如'ago','3','weeks','days'等。然後嘗試解析列表與strtotime。如果這不起作用,請嘗試下一個最長的有效令牌列表。你顯然需要一個所有有效令牌strtotime所需的列表,但這不應該太難。

因此,在「3周前在非洲拍攝的照片」中,您的代碼將找到有效令牌「3」,「周」和「前」,並嘗試使用strtotime解析它們。

這並不完美,但我認爲它可以在很多情況下工作。

+0

這是一個非常好的主意 - 可以工作。解析有效令牌的列表,然後找到彼此聯合的一個集合。就像字符串中兩個彼此相鄰的有效令牌一樣。偉大的建議。 – Glycerine 2010-08-21 12:10:12