Regex дает разные результаты локально и на сервере - PullRequest
0 голосов
/ 25 апреля 2020

Привет, я попробовал свой код локально, используя wampserver 3.2.0, и он работает нормально, однако, когда я загружаю его онлайн и запускаю, он дает другие результаты. Вот оно:

<?php
  class Gallery {
    // Name of the gallery, used to build folder path
    private $name;

    function __construct($name) {
      $this->name = $name;
    }

    /*
     * Returns the list of file names in a gallery folder
     */
      public function getFileNames() {
        $path = "../../images/$this->name";
        if (is_dir($path)) {
          $allFileNamesArray = preg_grep('/^([^.])/', scandir($path, SCANDIR_SORT_ASCENDING)); // preg-grep removes ".", ".." and hidden files
          $filteredFileNamesArray = array();

          // Building regular expression
          $datePattern        = "\[((19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])\]";
          $tag                = "[a-z]+(?:-[a-z]+)*";
          $regroupmentPattern = "\[($tag)?\]";
          $taglistPattern     = "\[((?:$tag)?(?:;(?:$tag))*)\]";
          $countryPattern     = "\[([a-z]{2})\]";
          $freePattern        = "\[([^\[\]]*)\]";
          $extensionPattern   = "\.(jpg|png)";
          $repetitionPattern  = "(?:\(\d+\))?";

          $fullPattern        = "/^$datePattern$regroupmentPattern$taglistPattern$countryPattern$freePattern$freePattern$repetitionPattern$extensionPattern$/";

          $nbMatches = 0;
          $nbIgnored = 0;
          $nbTotal   = 0;
          foreach ($allFileNamesArray as $fileName) {
            $matches = array();
            $doMatch = preg_match($fullPattern, $fileName, $matches, PREG_UNMATCHED_AS_NULL);
            if ($doMatch) {
              $filteredFileNamesArray[] = $fileName;
              $nbMatches += 1;
            }
            else {
              $nbIgnored += 1;
            }
            $nbTotal += 1;
          }

          return array(
            "nbMatches" => $nbMatches,
            "nbIgnored" => $nbIgnored,
            "nbTotal"   => $nbTotal,
            "regex"     => $fullPattern,
            "fineNames" => $filteredFileNamesArray
          );
        }
        else {
          return false;
        }
      }
  }
?>

Может ли это быть из-за того, что wamp использует php версию 7.3.12, а мой сервер использует версию 5.6 и, если да, как исправить мое регулярное выражение, чтобы оно работало в обоих?

1 Ответ

0 голосов
/ 25 апреля 2020

PREG_UNMATCHED_AS_NULL была проблема, я удалил ее и получил те же результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...