正则表达式从文本中提取json字符串

时间:2016-02-01 19:50:46

标签: php json regex

我正在寻找正则表达式从文本中提取json字符串。我有下面的文字,其中包含。 我的json:

[
  {
    "message": "(.*)",
    "answer": " :с"
  },
  {
    "message": "http:\/\/(.*)\.(.*)\/[\S\s]+\ ?",
    "answer": "No!"
  }
]

和php解析:

json_decode($json); //null
var_dump(json_last_error() == JSON_ERROR_SYNTAX); //true

1 个答案:

答案 0 :(得分:1)

如果您致电json_last_error_msg(),您将获得以下信息:

  

无效的字符串序列

实际上,字符串"http:\/\/(.*)\.(.*)\/[\S\s]+\ ?" 是每the spec个有效的JSON字符串:

JSON string spec http://json.org/string.gif

您的字符串包含无效的转义符,例如\S\s(空格)。

相反,尝试逃避每个反斜杠:

$str = <<<'END'
[
  {
    "message": "(.*)",
    "answer": " :с"
  },
  {
    "message": "http:\\/\\/(.*)\\.(.*)\\/[\\S\\s]+\\ ?",
    "answer": "No!"
  }
]
END;

$json = json_decode($str);
var_dump($json);

这很有效。