Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Regex.php

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 6.37 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of the Symfony package.
 005   *
 006   * (c) Fabien Potencier <fabien@symfony.com>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace Symfony\Component\Finder\Expression;
 013   
 014  @trigger_error('The '.__NAMESPACE__.'\Regex class is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED);
 015   
 016  /**
 017   * @author Jean-François Simon <contact@jfsimon.fr>
 018   */
 019  class Regex implements ValueInterface
 020  {
 021      const START_FLAG = '^';
 022      const END_FLAG = '$';
 023      const BOUNDARY = '~';
 024      const JOKER = '.*';
 025      const ESCAPING = '\\';
 026   
 027      /**
 028       * @var string
 029       */
 030      private $pattern;
 031   
 032      /**
 033       * @var array
 034       */
 035      private $options;
 036   
 037      /**
 038       * @var bool
 039       */
 040      private $startFlag;
 041   
 042      /**
 043       * @var bool
 044       */
 045      private $endFlag;
 046   
 047      /**
 048       * @var bool
 049       */
 050      private $startJoker;
 051   
 052      /**
 053       * @var bool
 054       */
 055      private $endJoker;
 056   
 057      /**
 058       * @param string $expr
 059       *
 060       * @return Regex
 061       *
 062       * @throws \InvalidArgumentException
 063       */
 064      public static function create($expr)
 065      {
 066          if (preg_match('/^(.{3,}?)([imsxuADU]*)$/', $expr, $m)) {
 067              $start = substr($m[1], 0, 1);
 068              $end = substr($m[1], -1);
 069   
 070              if (
 071                  ($start === $end && !preg_match('/[*?[:alnum:] \\\\]/', $start))
 072                  || ($start === '{' && $end === '}')
 073                  || ($start === '(' && $end === ')')
 074              ) {
 075                  return new self(substr($m[1], 1, -1), $m[2], $end);
 076              }
 077          }
 078   
 079          throw new \InvalidArgumentException('Given expression is not a regex.');
 080      }
 081   
 082      /**
 083       * @param string $pattern
 084       * @param string $options
 085       * @param string $delimiter
 086       */
 087      public function __construct($pattern, $options = '', $delimiter = null)
 088      {
 089          if (null !== $delimiter) {
 090              // removes delimiter escaping
 091              $pattern = str_replace('\\'.$delimiter, $delimiter, $pattern);
 092          }
 093   
 094          $this->parsePattern($pattern);
 095          $this->options = $options;
 096      }
 097   
 098      /**
 099       * @return string
 100       */
 101      public function __toString()
 102      {
 103          return $this->render();
 104      }
 105   
 106      /**
 107       * {@inheritdoc}
 108       */
 109      public function render()
 110      {
 111          return self::BOUNDARY
 112              .$this->renderPattern()
 113              .self::BOUNDARY
 114              .$this->options;
 115      }
 116   
 117      /**
 118       * {@inheritdoc}
 119       */
 120      public function renderPattern()
 121      {
 122          return ($this->startFlag ? self::START_FLAG : '')
 123              .($this->startJoker ? self::JOKER : '')
 124              .str_replace(self::BOUNDARY, '\\'.self::BOUNDARY, $this->pattern)
 125              .($this->endJoker ? self::JOKER : '')
 126              .($this->endFlag ? self::END_FLAG : '');
 127      }
 128   
 129      /**
 130       * {@inheritdoc}
 131       */
 132      public function isCaseSensitive()
 133      {
 134          return !$this->hasOption('i');
 135      }
 136   
 137      /**
 138       * {@inheritdoc}
 139       */
 140      public function getType()
 141      {
 142          return Expression::TYPE_REGEX;
 143      }
 144   
 145      /**
 146       * {@inheritdoc}
 147       */
 148      public function prepend($expr)
 149      {
 150          $this->pattern = $expr.$this->pattern;
 151   
 152          return $this;
 153      }
 154   
 155      /**
 156       * {@inheritdoc}
 157       */
 158      public function append($expr)
 159      {
 160          $this->pattern .= $expr;
 161   
 162          return $this;
 163      }
 164   
 165      /**
 166       * @param string $option
 167       *
 168       * @return bool
 169       */
 170      public function hasOption($option)
 171      {
 172          return false !== strpos($this->options, $option);
 173      }
 174   
 175      /**
 176       * @param string $option
 177       *
 178       * @return Regex
 179       */
 180      public function addOption($option)
 181      {
 182          if (!$this->hasOption($option)) {
 183              $this->options .= $option;
 184          }
 185   
 186          return $this;
 187      }
 188   
 189      /**
 190       * @param string $option
 191       *
 192       * @return Regex
 193       */
 194      public function removeOption($option)
 195      {
 196          $this->options = str_replace($option, '', $this->options);
 197   
 198          return $this;
 199      }
 200   
 201      /**
 202       * @param bool $startFlag
 203       *
 204       * @return Regex
 205       */
 206      public function setStartFlag($startFlag)
 207      {
 208          $this->startFlag = $startFlag;
 209   
 210          return $this;
 211      }
 212   
 213      /**
 214       * @return bool
 215       */
 216      public function hasStartFlag()
 217      {
 218          return $this->startFlag;
 219      }
 220   
 221      /**
 222       * @param bool $endFlag
 223       *
 224       * @return Regex
 225       */
 226      public function setEndFlag($endFlag)
 227      {
 228          $this->endFlag = (bool) $endFlag;
 229   
 230          return $this;
 231      }
 232   
 233      /**
 234       * @return bool
 235       */
 236      public function hasEndFlag()
 237      {
 238          return $this->endFlag;
 239      }
 240   
 241      /**
 242       * @param bool $startJoker
 243       *
 244       * @return Regex
 245       */
 246      public function setStartJoker($startJoker)
 247      {
 248          $this->startJoker = $startJoker;
 249   
 250          return $this;
 251      }
 252   
 253      /**
 254       * @return bool
 255       */
 256      public function hasStartJoker()
 257      {
 258          return $this->startJoker;
 259      }
 260   
 261      /**
 262       * @param bool $endJoker
 263       *
 264       * @return Regex
 265       */
 266      public function setEndJoker($endJoker)
 267      {
 268          $this->endJoker = (bool) $endJoker;
 269   
 270          return $this;
 271      }
 272   
 273      /**
 274       * @return bool
 275       */
 276      public function hasEndJoker()
 277      {
 278          return $this->endJoker;
 279      }
 280   
 281      /**
 282       * @param array $replacement
 283       *
 284       * @return Regex
 285       */
 286      public function replaceJokers($replacement)
 287      {
 288          $replace = function ($subject) use ($replacement) {
 289              $subject = $subject[0];
 290              $replace = 0 === substr_count($subject, '\\') % 2;
 291   
 292              return $replace ? str_replace('.', $replacement, $subject) : $subject;
 293          };
 294   
 295          $this->pattern = preg_replace_callback('~[\\\\]*\\.~', $replace, $this->pattern);
 296   
 297          return $this;
 298      }
 299   
 300      /**
 301       * @param string $pattern
 302       */
 303      private function parsePattern($pattern)
 304      {
 305          if ($this->startFlag = self::START_FLAG === substr($pattern, 0, 1)) {
 306              $pattern = substr($pattern, 1);
 307          }
 308   
 309          if ($this->startJoker = self::JOKER === substr($pattern, 0, 2)) {
 310              $pattern = substr($pattern, 2);
 311          }
 312   
 313          if ($this->endFlag = (self::END_FLAG === substr($pattern, -1) && self::ESCAPING !== substr($pattern, -2, -1))) {
 314              $pattern = substr($pattern, 0, -1);
 315          }
 316   
 317          if ($this->endJoker = (self::JOKER === substr($pattern, -2) && self::ESCAPING !== substr($pattern, -3, -2))) {
 318              $pattern = substr($pattern, 0, -2);
 319          }
 320   
 321          $this->pattern = $pattern;
 322      }
 323  }
 324