Php从字符串中查找任何日期

时间:2013-08-29 01:31:53

标签: php regex

我需要帮助编写一个脚本,在脚本中搜索可能出现的日期。

它应该查找所有形式的日期示例:

  • Dd-m1yyyy
  • 提及某一天sat-sun
  • 任何具体的确切日期Sunday 28th July

等等...

然后返回找到的日期

3 个答案:

答案 0 :(得分:5)

您可以使用preg_match或preg_match_all函数

http://php.net/manual/en/function.preg-match.php

http://www.php.net/manual/en/function.preg-match-all.php

这是正则表达式语法指南

http://www.php.net/manual/en/regexp.reference.meta.php

您需要创建一个您尝试提取的所有可能日期格式的列表,然后构建与这些日期匹配的正则表达式。

如果您可以发布所有这些日期格式的列表,那么我相信如果您遇到问题,人们会帮助您创建正则表达式

示例日期01-12-1970

$pattern = "/\d{2}\-\d{2}\-\d{4}/";

if (preg_match($pattern, $content, $matches)) {
   echo "Found Match on {$matches[0]}";
}

示例日期:7月28日星期日

这个匹配

  1. 以day结尾的任何单词
  2. 后面是空白
  3. 后跟1或2位数日期
  4. 接着是序数。 st,th或rd
  5. 后面是空白
  6. 跟随者的任何一个词(假设它是一个月,如果模式的其余部分匹配)

      $pattern = "/\w+day\s\d{1,2}(st|th|rd)\s\w+/";
      if (preg_match($pattern, $content, $matches)) {
        echo "Found Match on {$matches[0]}";
      }
    
  7. 如果你需要测试你的正则表达式,有很多在线正则表达式工具。

    http://refiddle.com/

答案 1 :(得分:1)

我应该建议Preg_Matchhttp://php.net/manual/en/function.preg-match.php

此类日期的示例:04-09-1990

$matches = array();
preg_match('/(\d{2})-(\D*)-(\d{4})/', $string, $matches)

扩展正则表达式的方式。很好的解释http://www.regular-expressions.info/dates.html

* 提示在http://regexlib.com/上搜索合适的正则表达式

答案 2 :(得分:-1)

正则表达式将是最佳解决方案,但您也可以使用由您正在查找的数组组成的数组。然后使用strpos遍历数组以查找是否(以及在哪里)您要查找的字符串存在。关注一周中的几天和几个月的名称和缩写。如果您搜索该月的某一天,您将获得太多误报结果。