RegEx正在使我的JSON变形

时间:2014-07-30 22:13:36

标签: php regex json

这很不寻常。我有以下JSON文件:

settings.json

{
    "somekey":"someval",
    "regexes":{
        "url":"/([^\/]+)(?:\/\(([^\)]+)\))?\/?([\S]+)?/"
    }
}

PHP

var_dump(json_decode(file_get_contents('settings.json'),true))正在使用null返回json_last_error(),说我的JSON格式不正确。

我一直在检查它是否不喜欢我的正则表达式中的某些字符...删除随机位并检查...有时它会返回我的JSON对象,有时会返回{{ 1}},但我似乎无法缩小范围。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

对于要作为反斜杠打印的每个反斜杠,您需要四个反斜杠。因此,以下结果给出了您的预期结果:

<?php 
    $json = '{
        "somekey":"someval",
        "regexes":{
            "url":"/([^\\\\/]+)(?:\\\\/\\\\(([^\\\\)]+)\\\\))?\\\\/?([\\\\S]+)?/"
        }
    }';

    var_dump(json_decode($json));

输出:

object(stdClass)#1 (2) {
  ["somekey"]=>
  string(7) "someval"
  ["regexes"]=>
  object(stdClass)#2 (1) {
    ["url"]=>
    string(40) "/([^\/]+)(?:\/\(([^\)]+)\))?\/?([\S]+)?/"
  }
}

答案 1 :(得分:1)

必须使用JSON转义反斜杠。这是有效的:

{
    "somekey":"someval",
    "regexes":{
        "url":"/([^\\/]+)(?:\\/\\(([^\\)]+)\\))?\\/?([\\S]+)?/"       
    }
}

var_dump的输出将是:

array(2) {
  ["somekey"]=>
  string(7) "someval"
  ["regexes"]=>
  array(1) {
    ["url"]=>
    string(40) "/([^\/]+)(?:\/\(([^\)]+)\))?\/?([\S]+)?/"
  }
}