【问题标题】:Filter date from string with dates从带有日期的字符串中过滤日期
【发布时间】:2014-02-05 18:34:42
【问题描述】:

我有一个字符串,其中包含来自 Google Calender JSON 的日期,我需要在其中检索 YYY-MM-DD 格式的日期:

"content": {
    "$t": "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed",
    "type": "html"
},

我想过做一个使用 split 来“清理”的函数,比如:

$string = "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed";
$splitOne = split(' to ',$string);
$firstDate = split('When: ', $splitOne[0]);
$secondtDate = split(' \n', $splitOne[1]);
echo $firstDate[1]; echo '<br />';
echo $secondtDate[0]; echo '<br />';

但这呼应了:

Mon Jun 30, 2014 // as expected
Mon Jul 7, 2014 \u003cbr /\u003e \u003cbr /\u003eEvent Status: confirmed // not expected, should be "Mon Jul 7, 2014"

split() 中缺少什么?顺便说一句,有没有正则表达式解决方案呢?

【问题讨论】:

  • 你应该做一个var_dump($splitOne[1]);,也许\n之前的字符不是空格。您也可以仅在 \n 上爆炸并修剪结果。
  • @jeroen,var_dump 给了string(75) "Mon Jul 7, 2014 \u003cbr /\u003e \u003cbr /\u003eEvent Status: confirmed"
  • 那里没有\n,所以您的解决方案和寻找\n 的解决方案都不会起作用...
  • @jeroen:完全正确。对我来说很神秘……知道为什么吗? phpfiddle.org/main/code/s5v-kx8
  • @jeroen, same result with explode :/

标签: php regex date


【解决方案1】:

使用正则表达式可能更容易:

$string = "When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed";

preg_match('/When: (.*) to ([^\n]+)/', $string, $matches);

print_r($matches);

如果需要,然后trim() $matches [1] 和 [2]。

【讨论】:

    【解决方案2】:

    有一个正则表达式解决方案。我为你抛出了一个正则表达式here

    您可以使用捕获组 1-6 来提取您需要的信息并将其转换为您想要的格式。

    正则表达式是:

    (?:When:\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})\sto\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})).*
    

    使用捕获组:

    \1 = Jun
    \2 = 30
    \3 = 2014
    \4 = Jul
    \5 = 7
    \6 = 2014
    

    PHP 代码示例:

    $re = '/(?:When:\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})\sto\s[a-zA-Z]{3}\s([a-zA-Z]{3})\s(\d\d?)\,\s(\d{4})).*/'; 
    $str = 'When: Mon Jun 30, 2014 to Mon Jul 7, 2014 \n\u003cbr /\u003e\n\n\n\u003cbr /\u003eEvent Status: confirmed'; 
    
    preg_match($re, $str, $matches);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 2012-08-30
      • 2018-01-07
      • 2014-04-30
      • 2018-09-30
      相关资源
      最近更新 更多