File size: 1.51Kb
<?php declare(strict_types=1);
/**
* @package s9e\RegexpBuilder
* @copyright Copyright (c) 2016-2022 The s9e authors
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\RegexpBuilder;
use function str_split;
class Escaper
{
/**
* @var array<string> Characters to escape in a character class
*/
public $inCharacterClass = ['-' => '\\-', '\\' => '\\\\', ']' => '\\]', '^' => '\\^'];
/**
* @var array<string> Characters to escape outside of a character class
*/
public $inLiteral = [
'$' => '\\$', '(' => '\\(', ')' => '\\)', '*' => '\\*',
'+' => '\\+', '.' => '\\.', '?' => '\\?', '[' => '\\[',
'\\' => '\\\\', '^' => '\\^', '{' => '\\{', '|' => '\\|'
];
/**
* @param string $delimiter Delimiter used in the final regexp
*/
public function __construct(string $delimiter = '/')
{
foreach (str_split($delimiter, 1) as $char)
{
$this->inCharacterClass[$char] = '\\' . $char;
$this->inLiteral[$char] = '\\' . $char;
}
}
/**
* Escape given character to be used in a character class
*
* @param string $char Original character
* @return string Escaped character
*/
public function escapeCharacterClass(string $char): string
{
return $this->inCharacterClass[$char] ?? $char;
}
/**
* Escape given character to be used outside of a character class
*
* @param string $char Original character
* @return string Escaped character
*/
public function escapeLiteral(string $char): string
{
return $this->inLiteral[$char] ?? $char;
}
}