original_string: public function matchPackageVersions($availableVersions, $wantedVersion)
      {
          $m = null;
          if (preg_match('/^(\d+(?:\.\d+)*)(?:dev|alpha|a|beta|b|rc)/i', $wantedVersion, $m)) {
              $wantedVersionBase = $m[1];
          } else {
              $wantedVersionBase = $wantedVersion;
          }
          $wantedVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $wantedVersionBase);
          $result = null;
          $availableVersions = $this->sortPackageVersions($availableVersions, false);
          foreach ($availableVersions as $availableVersion) {
              if ($result === null) {
                  $result = $availableVersion;
              }
              if (strpos($availableVersion, PackageVersionEntity::DEV_PREFIX) === 0) {
                  $availableVersionBase = substr($availableVersion, strlen(PackageVersionEntity::DEV_PREFIX));
                  $availableVersionIsDev = true;
              } else {
                  $availableVersionBase = $availableVersion;
                  $availableVersionIsDev = false;
              }
              $availableVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $availableVersionBase);
              if ($availableVersionIsDev) {
                  $availableVersionIsDev .= str_repeat('.' . PHP_INT_MAX, 6);
              }
              $cmp = version_compare($availableVersionComparable, $wantedVersionComparable);
              if ($cmp > 0) {
                  if ($availableVersionIsDev && strpos($availableVersionBase . '.', $wantedVersionBase . '.') === 0) {
                      $result = $availableVersion;
                  }
                  break;
              }
              $result = $availableVersion;
              if ($cmp === 0) {
                  break;
              }
          }
  
          return $result;
      }
code: public function matchPackageVersions($availableVersions, $wantedVersion)
      {
          $m = null;
          if (preg_match('/^(\d+(?:\.\d+)*)(?:dev|alpha|a|beta|b|rc)/i', $wantedVersion, $m)) {
              $wantedVersionBase = $m[1];
          } else {
              $wantedVersionBase = $wantedVersion;
          }
          $wantedVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $wantedVersionBase);
          $result = null;
          $availableVersions = $this->sortPackageVersions($availableVersions, false);
          foreach ($availableVersions as $availableVersion) {
              if ($result === null) {
                  $result = $availableVersion;
              }
              if (strpos($availableVersion, PackageVersionEntity::DEV_PREFIX) === 0) {
                  $availableVersionBase = substr($availableVersion, strlen(PackageVersionEntity::DEV_PREFIX));
                  $availableVersionIsDev = true;
              } else {
                  $availableVersionBase = $availableVersion;
                  $availableVersionIsDev = false;
              }
              $availableVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $availableVersionBase);
              if ($availableVersionIsDev) {
                  $availableVersionIsDev .= str_repeat('.' . PHP_INT_MAX, 6);
              }
              $cmp = version_compare($availableVersionComparable, $wantedVersionComparable);
              if ($cmp > 0) {
                  if ($availableVersionIsDev && strpos($availableVersionBase . '.', $wantedVersionBase . '.') === 0) {
                      $result = $availableVersion;
                  }
                  break;
              }
              $result = $availableVersion;
              if ($cmp === 0) {
                  break;
              }
          }
  
          return $result;
      }
code_tokens: public function matchPackageVersions ( $ availableVersions , $ wantedVersion ) { $ m = null ; if ( preg_match ( '/^(\d+(?:\.\d+)*)(?:dev|alpha|a|beta|b|rc)/i' , $ wantedVersion , $ m ) ) { $ wantedVersionBase = $ m [ 1 ] ; } else { $ wantedVersionBase = $ wantedVersion ; } $ wantedVersionComparable = preg_replace ( '/^(.*?\d)(\.0+)+$/' , '\1' , $ wantedVersionBase ) ; $ result = null ; $ availableVersions = $ this -> sortPackageVersions ( $ availableVersions , false ) ; foreach ( $ availableVersions as $ availableVersion ) { if ( $ result === null ) { $ result = $ availableVersion ; } if ( strpos ( $ availableVersion , PackageVersionEntity :: DEV_PREFIX ) === 0 ) { $ availableVersionBase = substr ( $ availableVersion , strlen ( PackageVersionEntity :: DEV_PREFIX ) ) ; $ availableVersionIsDev = true ; } else { $ availableVersionBase = $ availableVersion ; $ availableVersionIsDev = false ; } $ availableVersionComparable = preg_replace ( '/^(.*?\d)(\.0+)+$/' , '\1' , $ availableVersionBase ) ; if ( $ availableVersionIsDev ) { $ availableVersionIsDev .= str_repeat ( '.' . PHP_INT_MAX , 6 ) ; } $ cmp = version_compare ( $ availableVersionComparable , $ wantedVersionComparable ) ; if ( $ cmp > 0 ) { if ( $ availableVersionIsDev && strpos ( $ availableVersionBase . '.' , $ wantedVersionBase . '.' ) === 0 ) { $ result = $ availableVersion ; } break ; } $ result = $ availableVersion ; if ( $ cmp === 0 ) { break ; } } return $ result ; }
docstring: Guess the best package version entity corresponding to a list of versions.
  
  @param string[] $availableVersions
  @param string $wantedVersion
  
  @return string|null Returns null if $availableVersions is empty, a version otherwise
docstring_tokens: Guess the best package version entity corresponding to a list of versions .