Вход Регистрация
Файл: gapps/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
Строк: 107
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentFinderIterator;

/**
 * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings).
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
abstract class MultiplePcreFilterIterator extends FilterIterator
{
    protected 
$matchRegexps = array();
    protected 
$noMatchRegexps = array();

    
/**
     * Constructor.
     *
     * @param Iterator $iterator        The Iterator to filter
     * @param array     $matchPatterns   An array of patterns that need to match
     * @param array     $noMatchPatterns An array of patterns that need to not match
     */
    
public function __construct(Iterator $iterator, array $matchPatterns, array $noMatchPatterns)
    {
        foreach (
$matchPatterns as $pattern) {
            
$this->matchRegexps[] = $this->toRegex($pattern);
        }

        foreach (
$noMatchPatterns as $pattern) {
            
$this->noMatchRegexps[] = $this->toRegex($pattern);
        }

        
parent::__construct($iterator);
    }

    
/**
     * Checks whether the string is accepted by the regex filters.
     *
     * If there is no regexps defined in the class, this method will accept the string.
     * Such case can be handled by child classes before calling the method if they want to
     * apply a different behavior.
     *
     * @param string $string The string to be matched against filters
     *
     * @return bool
     */
    
protected function isAccepted($string)
    {
        
// should at least not match one rule to exclude
        
foreach ($this->noMatchRegexps as $regex) {
            if (
preg_match($regex$string)) {
                return 
false;
            }
        }

        
// should at least match one rule
        
if ($this->matchRegexps) {
            foreach (
$this->matchRegexps as $regex) {
                if (
preg_match($regex$string)) {
                    return 
true;
                }
            }

            return 
false;
        }

        
// If there is no match rules, the file is accepted
        
return true;
    }

    
/**
     * Checks whether the string is a regex.
     *
     * @param string $str
     *
     * @return bool Whether the given string is a regex
     */
    
protected function isRegex($str)
    {
        if (
preg_match('/^(.{3,}?)[imsxuADU]*$/'$str$m)) {
            
$start substr($m[1], 01);
            
$end substr($m[1], -1);

            if (
$start === $end) {
                return !
preg_match('/[*?[:alnum:] \\]/'$start);
            }

            foreach (array(array(
'{''}'), array('('')'), array('['']'), array('<''>')) as $delimiters) {
                if (
$start === $delimiters[0] && $end === $delimiters[1]) {
                    return 
true;
                }
            }
        }

        return 
false;
    }

    
/**
     * Converts string into regexp.
     *
     * @param string $str Pattern
     *
     * @return string regexp corresponding to a given string
     */
    
abstract protected function toRegex($str);
}
Онлайн: 1
Реклама