Preg_split 2个字符

时间:2018-07-02 09:39:27

标签: php regex preg-split

我正在尝试在2个变量(T&+)上分割字符串,将其用于“ 2018-06-25T10:32:00 + 01:00”时会将其分割为:-

[0] => 2018-06-25
[1] => 10:32:00
[2] => 01:00

所以我想我可以使用“ preg_split(” /(T | +)/“,$ ent)”,但是它根本没有用。

我在PHP中拥有的代码是:-

$ent = "2018-06-25T10:32:00+01:00";
print_r(preg_split("/ (T|\+) /", $ent));

有什么想法我做错了吗?

3 个答案:

答案 0 :(得分:2)

您的正则表达式中有问题。您可以像下面这样给它

print_r(preg_split("/T|\+/", $ent));

不使用正则表达式,也可以使用php的Datetime类将其拆分为日期和时间(我更喜欢)。

$ent = '2018-06-25T10:32:00+02:00';
$datetime = new DateTime($ent);

$date = $datetime->format('Y-m-d');
$time = $datetime->format('H:i:s');
$offset = $datetime->getOffset() / 3600;

echo $date.'<br/>';
echo $time.'<br/>';
echo $offset.'<br/>';

希望有帮助!

答案 1 :(得分:1)

在PHP中解析日期不是regex的最佳用例。也许这是用其他语言处理日期的最佳方法,但不是PHP 。与手动解析相比,PHP提供了DateTime classes,可以更快,更安全地处理日期。

这是您的代码的外观:

$date = new DateTime("2018-06-25T10:32:00+01:00");

echo $date->format('Y-m-d'), "\n";
echo $date->format('H:i:s'), "\n";
echo $date->format('P'), "\n";

查看结果:https://3v4l.org/gFvLp

详细了解DateTime类和DateTime::format()

答案 2 :(得分:0)

在您的示例中,您使用了具有含义的空白(T|\+)的交替。

您可以做的是删除空格并使用(T|\+)或使用character class [T+]

$ent = "2018-06-25T10:32:00+01:00";
print_r(preg_split("/[T+]/", $ent));