Escaper::escapeCharacterClass()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
cc 1
nc 1
nop 1
crap 1
1
<?php declare(strict_types=1);
2
3
/**
4
* @package   s9e\RegexpBuilder
5
* @copyright Copyright (c) 2016-2022 The s9e authors
6
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
7
*/
8
namespace s9e\RegexpBuilder;
9
10
class Escaper
11
{
12
	/**
13
	* @var array<string> Characters to escape in a character class
14
	*/
15
	public $inCharacterClass = ['-' => '\\-', '\\' => '\\\\', ']' => '\\]', '^' => '\\^'];
16
17
	/**
18
	* @var array<string> Characters to escape outside of a character class
19
	*/
20
	public $inLiteral = [
21
		'$'  => '\\$',  '(' => '\\(', ')' => '\\)', '*' => '\\*',
22
		'+'  => '\\+',  '.' => '\\.', '?' => '\\?', '[' => '\\[',
23
		'\\' => '\\\\', '^' => '\\^', '{' => '\\{', '|' => '\\|'
24
	];
25
26
	/**
27
	* @param string $delimiter Delimiter used in the final regexp
28
	*/
29 30
	public function __construct(string $delimiter = '/')
30
	{
31 30
		foreach (str_split($delimiter, 1) as $char)
32
		{
33 30
			$this->inCharacterClass[$char] = '\\' . $char;
34 30
			$this->inLiteral[$char]        = '\\' . $char;
35
		}
36 30
	}
37
38
	/**
39
	* Escape given character to be used in a character class
40
	*
41
	* @param  string $char Original character
42
	* @return string       Escaped character
43
	*/
44 14
	public function escapeCharacterClass(string $char): string
45
	{
46 14
		return $this->inCharacterClass[$char] ?? $char;
47
	}
48
49
	/**
50
	* Escape given character to be used outside of a character class
51
	*
52
	* @param  string $char Original character
53
	* @return string       Escaped character
54
	*/
55 16
	public function escapeLiteral(string $char): string
56
	{
57 16
		return $this->inLiteral[$char] ?? $char;
58
	}
59
}