Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/jasny/twig-extensions/src/PcreExtension.php
<?php

namespace Jasny\Twig;

/**
 * Expose the PCRE functions to Twig.
 *
 * @see http://php.net/manual/en/book.pcre.php
 */
class PcreExtension extends \Twig_Extension
{
   
/**
     * Class constructor
     */
   
public function __construct()
    {
        if (!
extension_loaded('pcre')) {
            throw new \
Exception("The Twig PCRE extension requires the PCRE extension."); // @codeCoverageIgnore
       
}
    }

   
/**
     * Return extension name
     *
     * @return string
     */
   
public function getName()
    {
        return
'jasny/pcre';
    }

   
/**
     * {@inheritdoc}
     */
   
public function getFilters()
    {
        return [
            new \
Twig_SimpleFilter('preg_quote', [$this, 'quote']),
            new \
Twig_SimpleFilter('preg_match', [$this, 'match']),
            new \
Twig_SimpleFilter('preg_get', [$this, 'get']),
            new \
Twig_SimpleFilter('preg_get_all', [$this, 'getAll']),
            new \
Twig_SimpleFilter('preg_grep', [$this, 'grep']),
            new \
Twig_SimpleFilter('preg_replace', [$this, 'replace']),
            new \
Twig_SimpleFilter('preg_filter', [$this, 'filter']),
            new \
Twig_SimpleFilter('preg_split', [$this, 'split']),
        ];
    }

   
   
/**
     * Check that the regex doesn't use the eval modifier
     *
     * @param string $pattern
     * @throws \LogicException
     */
   
protected function assertNoEval($pattern)
    {
       
$pos = strrpos($pattern, $pattern[0]);
       
$modifiers = substr($pattern, $pos + 1);
       
        if (
strpos($modifiers, 'e') !== false) {
            throw new \
Twig_Error_Runtime("Using the eval modifier for regular expressions is not allowed");
        }
    }
   

   
/**
     * Quote regular expression characters.
     *
     * @param string $value
     * @param string $delimiter
     * @return string
     */
   
public function quote($value, $delimiter = '/')
    {
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_quote($value, $delimiter);
    }

   
/**
     * Perform a regular expression match.
     *
     * @param string $value
     * @param string $pattern
     * @return boolean
     */
   
public function match($value, $pattern)
    {
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_match($pattern, $value);
    }

   
/**
     * Perform a regular expression match and return a matched group.
     *
     * @param string $value
     * @param string $pattern
     * @return string
     */
   
public function get($value, $pattern, $group = 0)
    {
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_match($pattern, $value, $matches) && isset($matches[$group]) ? $matches[$group] : null;
    }

   
/**
     * Perform a regular expression match and return the group for all matches.
     *
     * @param string $value
     * @param string $pattern
     * @return array
     */
   
public function getAll($value, $pattern, $group = 0)
    {
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_match_all($pattern, $value, $matches, PREG_PATTERN_ORDER) && isset($matches[$group])
            ?
$matches[$group] : [];
    }

   
/**
     * Perform a regular expression match and return an array of entries that match the pattern
     *
     * @param array  $values
     * @param string $pattern
     * @param string $flags    Optional 'invert' to return entries that do not match the given pattern.
     * @return array
     */
   
public function grep($values, $pattern, $flags = '')
    {
        if (!isset(
$values)) {
            return
null;
        }
       
        if (
is_string($flags)) {
           
$flags = $flags === 'invert' ? PREG_GREP_INVERT : 0;
        }
       
        return
preg_grep($pattern, $values, $flags);
    }

   
/**
     * Perform a regular expression search and replace.
     *
     * @param string $value
     * @param string $pattern
     * @param string $replacement
     * @param int    $limit
     * @return string
     */
   
public function replace($value, $pattern, $replacement = '', $limit = -1)
    {
       
$this->assertNoEval($pattern);
       
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_replace($pattern, $replacement, $value, $limit);
    }

   
/**
     * Perform a regular expression search and replace, returning only matched subjects.
     *
     * @param string $value
     * @param string $pattern
     * @param string $replacement
     * @param int    $limit
     * @return string
     */
   
public function filter($value, $pattern, $replacement = '', $limit = -1)
    {
       
$this->assertNoEval($pattern);
       
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_filter($pattern, $replacement, $value, $limit);
    }

   
/**
     * Split text into an array using a regular expression.
     *
     * @param string $value
     * @param string $pattern
     * @return array
     */
   
public function split($value, $pattern)
    {
        if (!isset(
$value)) {
            return
null;
        }
       
        return
preg_split($pattern, $value);
    }
}