Php 将字符串转换为json

Php 将字符串转换为json,php,regex,json,Php,Regex,Json,我有一个带有24小时时钟时间戳和电视节目名称的字符串,格式如下: { "shows": [ { "show": "Batman", "time": "21.45" }, { "show": "The Hour", "time": "23.30" }, { "show": "Newsfeed", "time": "00.20" }, {

我有一个带有24小时时钟时间戳和电视节目名称的字符串,格式如下:

{
  "shows": [
    {
        "show": "Batman",
        "time": "21.45"
    },
    {
        "show": "The Hour",
        "time": "23.30"
    },
    {
        "show": "Newsfeed",
        "time": "00.20"
    },
    {
        // etc...
    }
  ]
}
21.45蝙蝠侠23.30小时00.20新闻源04.00其他源21.55足球:美国-西班牙23.30连线

字符串可以是任意长度,我不能以任何方式修改字符串。我仍然希望以一种需要它作为json的方式使用字符串。字符串的格式始终相同

我的目标是将字符串转换为如下内容:

{
  "shows": [
    {
        "show": "Batman",
        "time": "21.45"
    },
    {
        "show": "The Hour",
        "time": "23.30"
    },
    {
        "show": "Newsfeed",
        "time": "00.20"
    },
    {
        // etc...
    }
  ]
}

我用PHP做这件事,我真的很讨厌regex,它在我2014年的学习列表中排名第一:

你应该在问题中包括你的尝试。用regex拆分这个字符串确实是一个很好的学习练习。在那之后,你可能想看看json_{encode,decode}函数。你试过json_encode$your_string吗?当然,我尝试过preg_split\\d+,$string,-3,preg_split\u NO_EMPTY@PatrikStorm你知道规则:顺便说一句,这里没有必要逃避反斜杠。所以\d+很好。如果你想要更花哨的东西,就给你吧?P\d+[.]\d+\s*?P.*=\s*\d+[.]\d+$。小心你应该在问题中包括你的尝试。用正则表达式拆分这个字符串确实是一个很好的学习练习。在那之后,你可能想看看json_{encode,decode}函数。你试过json_encode$your_string吗?当然,我尝试过preg_split\\d+,$string,-3,preg_split\u NO_EMPTY@PatrikStorm你知道规则:顺便说一句,这里没有必要逃避反斜杠。所以\d+很好。如果你想要更花哨的东西,就给你吧?P\d+[.]\d+\s*?P.*=\s*\d+[.]\d+$。小心使用preg_match_all“~?P\d+[.]\d+\s*?P.*=\s*\d+[.]\d+$~”、$input、$m尝试一些东西。选中$m:@HamZa需要对字符串进行预匹配,而不是在生成and之后。如果您可以控制代码可以返回的文本,则可以尝试将字符串序列化为正确的对象列表。你不必担心正则表达式。我可以控制返回的数据,但不能控制原始字符串。基本上我可以使用下划线或加入它们…@zeflex PS.不知道PHP沙盒网站,它现在是一个书签!尝试使用preg_match_all“~?P\d+[.]\d+\s*?P.*=\s*\d+[.]\d+$~”,$input,$m。选中$m:@HamZa需要对字符串进行预匹配,而不是在生成and之后。如果您可以控制代码可以返回的文本,则可以尝试将字符串序列化为正确的对象列表。你不必担心正则表达式。我可以控制返回的数据,但不能控制原始字符串。基本上我可以使用下划线或加入它们…@zeflex PS.不知道PHP沙盒网站,它现在是一个书签!
$code = '21.45 Batman 23.30 The Hour 00.20 Newsfeed 04.00 Otherfeed 21.55 Soccer: USA - Spain 23.30 The Wire';

preg_match_all('~(?P<time>\d+[.]\d+)\s*(?P<show>.*?)(?=\s*\d+[.]\d+|$)~', $code, $codeSplit);

$shows = array();
for($i = 0; $i <= count($codeSplit['time']); $i++) {
    $shows[] = array('show' => $codeSplit['show'][$i], 'time' => $codeSplit['time'][$i]);
}

$json = json_encode(array('shows' => $shows));


var_dump($json);