微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

匹配大括号内的或所有项目并将它们映射到给定的字符串

如何解决匹配大括号内的或所有项目并将它们映射到给定的字符串

我有以下问题:

例如,我有这个虚拟 URL test/{parameter1}/{parameter2}/{parameter3}/

并且我想从以下真实 URL 中提取与虚拟 URL 中的参数名称匹配的值,并将它们映射到数组中的参数名称

/test/abc/def/ghi/ 应该返回以下结果:

[
"paramter1" => "abc","paramter2" => "def","paramter3" => "ghi",]

/test/abc/def/ 应该返回以下结果:

[
"paramter1" => "abc",]

为此,我有以下两个功能一个提取一个映射。


    public static function processUrl($virtualUrl,$realUrl)
    {
    $realUrlRegex = preg_replace_callback('~\{([^{}]+)\}~',function ($matches)
    {
      $repl = '([^)]+)';
      self::$tmp[] = $matches[1];
      return $repl;
    },$virtualUrl);
    print_r(self::$tmp);
    $UrlArray = array();
    $matches = array();
    $realUrlRegex = str_replace('/','\/',$realUrlRegex);

    if (preg_match("/^" . $realUrlRegex . "$/",$realUrl,$matches))
    {
      print_r($matches); 
      for ($i = 0; $i < count(self::$tmp); $i++)
      {
        if(isset($matches[$i + 1])){
          $UrlArray[self::$tmp[$i]] = $matches[$i + 1];
        }
      }
      $matches = array();
      self::$tmp = array();
      return $UrlArray;
    }
    self::$tmp = array();
    return false;
    }

    
  

    public function mapUrl($route,$request)
    { 
    $dynamicParameters = $route->getDynamicParameters() ;
    $mappedUrl = preg_replace_callback('/{{([^}]+)}}/',function ($m) use ($dynamicParameters) {
      return $dynamicParameters[$m[1]]; },$request->getUrl());
    return $mappedUrl;
    }

为此,我有以下两个功能一个提取一个映射。

例如 1 它工作正常,但如果真实 url 中缺少虚拟参数之一,则 preg 匹配不会返回任何结果并且该 URL 未正确处理。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。