code: public static function expandPath($path)
      {
          if (preg_match('#^~[\\/]#', $path)) {
              return self::getUserDirectory() . substr($path, 1);
          }
  
          return preg_replace_callback('#^(\$|(?P<percent>%))(?P<var>\w++)(?(percent)%)(?P<path>.*)#', function ($matches) {
              // Treat HOME as an alias for USERPROFILE on Windows for legacy reasons
              if (Platform::isWindows() && $matches['var'] == 'HOME') {
                  return (getenv('HOME') ?: getenv('USERPROFILE')) . $matches['path'];
              }
  
              return getenv($matches['var']) . $matches['path'];
          }, $path);
      }
docs: Parses tildes and environment variables in paths.
  
  @param  string $path
  @return string