gpt4 book ai didi

php - 将 mikrotik 脚本拆分为键/值 php 数组

转载 作者:行者123 更新时间:2023-12-04 08:48:20 27 4
gpt4 key购买 nike

比方说,我在 mikrotik 路由器下面有这个脚本,我想提取一个带有键和值的数组,如果有另一个值包含 ,该怎么做? = 特点,

add name=100YER on-login=":do {:put \"a\";} on-error={};" rate-limit=256k/512k
结果应该是这样的:
$result=array ('name'=>'100YER', on-login=>':do {:put \"a\";} on-error={};', 'rate-limit'=>'256k/512k');
我用这个正则表达式用 = 分割它,但问题出在登录值上。
if (preg_match_all('/[^=]+/i', $response, $MATCHES) ){
//
}

最佳答案

您可以将 2 个捕获组与分支重置组一起使用:

(\w+(?:-\w+)*)=(?|"((?:[^"]+|(?<=\\)")++)"|([^"\s]+))
说明
  • (捕获 第 1 组
  • \w+(?:-\w+)*匹配 1+ 个单词字符,可选后跟 -和 1+ 个字字符

  • )关闭群 1
  • =字面匹配
  • (?|分支复位组
  • "(匹配 "并开始 第 2 组
  • (?:[^"]+|(?<=\\)")++匹配除 " 之外的任何字符或 \"

  • )"关闭第 2 组并匹配 "
  • |
  • ([^"\s]+)捕获 第3组 , 匹配除 " 之外的任何字符或空白字符

  • )关闭分支重置组

  • Regex demo | Php demo
    例如
    $re = '/(\w+(?:-\w+)*)=(?|"((?:[^"]+|(?<=\\\\)")++)"|([^"\s]+))/';
    $str = 'add name=100YER on-login=":do {:put \\"a\\";} on-error={};" rate-limit=256k/512k';

    preg_match_all($re, $str, $matches);
    $result = array_combine($matches[1], $matches[2]);
    print_r($result);
    输出
    Array
    (
    [name] => 100YER
    [on-login] => :do {:put \"a\";} on-error={};
    [rate-limit] => 256k/512k
    )

    关于php - 将 mikrotik 脚本拆分为键/值 php 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64198123/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com