使用PHP在括号内提取时间

时间:2018-04-17 03:26:33

标签: php regex trim

这是我第一次使用trim函数,我希望得到Time,不包括我的字符串的开括号和右括号。你能给我一些如何做到的提示和建议吗?

$string = "Updated by Carewina Almonte  (04/02/2018 21:58:32)";     
echo trim($string, "Updated by Carewina Almonte  (04/02/2018");     
exit();

4 个答案:

答案 0 :(得分:2)

您可以使用preg_match执行此任务:

$str = 'Updated by Carewina Almonte  (04/02/2018 21:58:32)';
preg_match('/(?<=\(\d{2}\/\d{2}\/\d{4} ).*(?=\))/', $str, $match);
echo $match[0];

<强>故障:

  • 正面观察(?<=\()。断言下面的正则表达式匹配:

    • \(字面匹配字符((区分大小写)
    • .*匹配任何字符(行终止符除外)
    • *量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
    • \d{2}匹配一个数字(等于[0-9]
    • {2}量词 - 完全匹配2
    • \/字面匹配字符/(区分大小写)
  • 积极前瞻(?=\))。断言下面的正则表达式匹配:

    • \)字面匹配字符)(区分大小写)

答案 1 :(得分:2)

在php中,你可以做到这一点,当且仅当日期和时间总是出现在字符串的末尾时才有效 -

 $string = "Updated by Carewina Almonte  (04/02/2018 21:58:32)";
 $time = substr($string,-9,8);
 echo $time;

答案 2 :(得分:1)

对于您的示例字符串,您可能会使用\(\K[^)]+(?=\))匹配括号内的内容。

这将匹配左括号\(,然后使用\K重置报告的匹配的起点。

在那场比赛之后,不是一个或两次以上的右括号[^)]+和一个肯定的前瞻,以断言接下来的是一个右括号(?=\))

然后,您可以使用$matches[0]创建DateTime或使用$re = '/\(\K[^)]+(?=\))/'; $str = 'Updated by Carewina Almonte (04/02/2018 21:58:32)'; preg_match($re, $str, $matches); $dateTime = new DateTime($matches[0]); if ($dateTime !== false) { echo $dateTime->format('H:i:s'); } 使用changed并提取时间:

changed

DateTime::createFromFormat

答案 3 :(得分:0)

$string = "Updated by Carewina Almonte  (04/02/2018 21:58:32)";     

if(preg_match("/\d{2}:\d{2}:\d{2}/", $string , $match))
{

    echo $match[0];
}

在这种情况下应使用正则表达式。