如何使用preg_match提取年份

时间:2010-12-02 12:57:46

标签: php regex preg-match cakephp-1.3

我有textarea用户输入详细信息,我想从textarea中提取年份。问题是用户以不同的方式进入年份。

某些用户输入的日期为1999'99september 99。如何使用单个正则表达式字符串来提取年份。

5 个答案:

答案 0 :(得分:2)

这应该用于从文本中提取所提及的日期:

preg_match_all('/(^|\s+)(\d{4}|\'\d{2}|(january|february|march|april|may|june|july|august|september|october|november|december) \d{2})(\s+|$)/i', $text, $matches);

我也想到了这一点(它为用户提供了更多的自由):

preg_match_all('/(^|\s+)((january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)?(\s|\s?\')(\d{2}|\d{4}))(\s+|$)/i', $text, $matches);

使用多个表达式解析时,上述所有内容都会更容易。为什么你需要一个?

如果你只想解析一个除此之外的字符串,你应该使用PHP的strtotime()-function

答案 1 :(得分:0)

\b\d\d(?:\d\d)?\b

将匹配两位或四位数字。因此,如果您的字符串只包含年份数字,那就足够了。

if (preg_match('/\b\d\d(?:\d\d)?\b/', $subject, $regs)) {
    $result = $regs[0];
}

答案 2 :(得分:0)

您可以尝试使用strtotime

  

strtotime - 将任何英文文本日期时间描述解析为Unix时间戳

date('Y', strtotime($userinput));

答案 3 :(得分:0)

[. -]((?:\d\d|')\d\d)$

答案 4 :(得分:0)

仅提取字符串中的数字:

/\b(\d+)\b/