Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace Dotenv\Util;
6
 
7
use GrahamCampbell\ResultType\Error;
8
use GrahamCampbell\ResultType\Success;
9
 
10
/**
11
 * @internal
12
 */
13
final class Regex
14
{
15
    /**
16
     * This class is a singleton.
17
     *
18
     * @codeCoverageIgnore
19
     *
20
     * @return void
21
     */
22
    private function __construct()
23
    {
24
        //
25
    }
26
 
27
    /**
28
     * Perform a preg match, wrapping up the result.
29
     *
30
     * @param string $pattern
31
     * @param string $subject
32
     *
33
     * @return \GrahamCampbell\ResultType\Result<bool,string>
34
     */
35
    public static function matches(string $pattern, string $subject)
36
    {
37
        return self::pregAndWrap(static function (string $subject) use ($pattern) {
38
            return @\preg_match($pattern, $subject) === 1;
39
        }, $subject);
40
    }
41
 
42
    /**
43
     * Perform a preg match all, wrapping up the result.
44
     *
45
     * @param string $pattern
46
     * @param string $subject
47
     *
48
     * @return \GrahamCampbell\ResultType\Result<int,string>
49
     */
50
    public static function occurrences(string $pattern, string $subject)
51
    {
52
        return self::pregAndWrap(static function (string $subject) use ($pattern) {
53
            return (int) @\preg_match_all($pattern, $subject);
54
        }, $subject);
55
    }
56
 
57
    /**
58
     * Perform a preg replace callback, wrapping up the result.
59
     *
60
     * @param string   $pattern
61
     * @param callable $callback
62
     * @param string   $subject
63
     * @param int|null $limit
64
     *
65
     * @return \GrahamCampbell\ResultType\Result<string,string>
66
     */
67
    public static function replaceCallback(string $pattern, callable $callback, string $subject, int $limit = null)
68
    {
69
        return self::pregAndWrap(static function (string $subject) use ($pattern, $callback, $limit) {
70
            return (string) @\preg_replace_callback($pattern, $callback, $subject, $limit ?? -1);
71
        }, $subject);
72
    }
73
 
74
    /**
75
     * Perform a preg split, wrapping up the result.
76
     *
77
     * @param string $pattern
78
     * @param string $subject
79
     *
80
     * @return \GrahamCampbell\ResultType\Result<string[],string>
81
     */
82
    public static function split(string $pattern, string $subject)
83
    {
84
        return self::pregAndWrap(static function (string $subject) use ($pattern) {
85
            /** @var string[] */
86
            return (array) @\preg_split($pattern, $subject);
87
        }, $subject);
88
    }
89
 
90
    /**
91
     * Perform a preg operation, wrapping up the result.
92
     *
93
     * @template V
94
     *
95
     * @param callable(string):V $operation
96
     * @param string             $subject
97
     *
98
     * @return \GrahamCampbell\ResultType\Result<V,string>
99
     */
100
    private static function pregAndWrap(callable $operation, string $subject)
101
    {
102
        $result = $operation($subject);
103
 
104
        if (\preg_last_error() !== \PREG_NO_ERROR) {
105
            /** @var \GrahamCampbell\ResultType\Result<V,string> */
106
            return Error::create(\preg_last_error_msg());
107
        }
108
 
109
        /** @var \GrahamCampbell\ResultType\Result<V,string> */
110
        return Success::create($result);
111
    }
112
}