【问题标题】:Unable to replace object property value with regex无法用正则表达式替换对象属性值
【发布时间】:2014-03-21 02:30:31
【问题描述】:

我正在尝试替换此 json 文件中 model 的值。 json文件包含:

{
    "model": {
        "template": "model.txt",
        "directory": "app/models",
        "filename": "{{Entity}}.php"
    },

我正在尝试使用以下正则表达式来替换它,但无法使其匹配...

$json = preg_replace('/"model": \{(.*?)\},/i', '"model": false', $json);

我知道我可以在解码后更改此值,这是处理此问题的理想方法。由于各种原因,运行此正则表达式将是处理此特定解决方案的最简单方法。

这是我正在使用的:

        $json = file_get_contents($path);
        $json = preg_replace('/"model": \{(.*?)\},/i', '"model": false', $json);
var_dump($json);
        exit;

【问题讨论】:

    标签: php regex json


    【解决方案1】:

    这些应该可以工作:

    第一个模式不会限制"model"内的项目数:

    ?preg_replace('/("model.*\{.*(\n.*)+?\n.+\},)/', '"model": false', $json);

    这会将匹配限制为您示例中的行数:

    ?preg_replace('/("model.*\{.*(\n.*){3}\n.+\},)/', '"model": false', $json);

    【讨论】:

    • 这些都没有找到适合我的匹配项。
    • 你看过我链接的例子吗?也许您的模式中需要额外的转义字符。
    • 噢!我没有。我显然错误地粘贴了一些东西,因为它现在可以工作了。谢谢!
    【解决方案2】:

    给定 $json 原始 json 内容

    $ajson=json_decode($json);
    $ajson['model']=false;
    $json=json_encode($ajson);
    

    【讨论】:

    • 噢,对不起。我应该指定我正在寻找 PHP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多