multihanded/regent

该Laravel包允许您以声明性方式编写正则表达式。

1.3.0 2024-07-22 08:38 UTC

This package is auto-updated.

Last update: 2024-09-22 08:58:42 UTC


README

关于

该Laravel包允许您以声明性方式编写正则表达式。

例如

  • 仅包含英文字母或数字
  • 长度为5到10个字符

您可以直接编写正则表达式,也可以以更优雅的方式进行

echo Regent::startsWith()
                ->openAnyOf()
                    ->range('a', 'z')
                    ->digit()
                ->closeAnyOf()
                ->between(5, 10)
                ->endsWith()
                ->caseless(); // ~^[a-z\d]{5,10}$~i

对于更复杂的正则表达式,您可以分别收集其子模式,这在重用和修改其他正则表达式构建过程中的子模式时非常方便。

    // regex to search for email in text
    $anyOf = Regent::openAnyOf()
                    ->range('a', 'z')
                    ->range(0, 9)
                    ->addPattern('_-')
                ->closeAnyOf()->pattern;

    $startsWith= Regent::openGroup()
                    ->addPattern($anyOf)
                    ->oneOrMore()
                    ->addPattern('.', true)
                  ->closeGroup()->pattern;

    $secondGroup = Regent::openGroup()
                        ->addPattern('.', true)
                        ->addPattern($anyOf)
                        ->oneOrMore()
                   ->closeGroup()->pattern;

    $firstSegment = Regent::zeroOrMore()
                    ->addPattern($anyOf)
                    ->oneOrMore()
                    ->addPattern('@')
                    ->addPattern($anyOf)
                    ->oneOrMore()->pattern;

    $endWith = Regent::zeroOrMore()
                    ->addPattern('.', true)
                    ->openAnyOf()
                        ->range('a', 'z')
                    ->closeAnyOf()
                    ->between(2, 6)->pattern;

    
    echo Regent::startsWith($startsWith)
                ->addPattern($firstSegment)
                ->addPattern($secondGroup)
                ->endsWith($endWith)
                ->caseless(); // ~^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$~i

如何安装

您可以使用composer安装此包

composer require multihanded/regent

如何使用

此包应通过外观使用

use MultihandED\Regent\Facades\Regent;

构建表达式后,您可以将生成的对象简单地转换为字符串。

请注意,外观配置为始终返回正则表达式构建类的新实例。

文档

公共属性

  • pattern (字符串) - 正则表达式模式,默认为空字符串。
  • flags (字符串) - 正则表达式标志,默认为空字符串。

不建议直接设置这些属性,但您可以根据自己的意愿自由设置。

公共方法

  • static init (string $delimiter = null): static - 创建并返回正则表达式构建器的实例。接受一个分隔符作为参数。如果没有提供分隔符,则设置默认分隔符。

  • clear(bool $withDelimiter = false): self - 将 patternflags 属性设置为空字符串。如果 $withDelimiter 参数为 true,则分隔符将设置为默认值。返回调用对象的引用。

分隔符

  • static setDelimiterDefault(string $newDelimiter) - 允许您设置默认分隔符。一旦设置,所有新创建的Regent对象都将使用 $newDelimiter 作为其分隔符。不返回任何内容。

  • static getDelimiterDefault(): string - 返回当前默认分隔符的值。

  • getDelimiter(): string - 返回调用对象分隔符的值。

Regent 接受以下字符作为有效分隔符: /~@;%` #。默认情况下,默认分隔符为 ~(波浪号)。

您还可以在项目的 AppServiceProvider 中设置默认分隔符

public function boot()
{
    Regent::setDelimiterDefault('%');
}

标志

有效标志列表: imsxADSUXJu。您可以在官方PHP文档中了解更多信息。

  • flag(string $flag, bool $add = true): self - 将 $flag 参数中指定的标志添加到 flags 属性中。忽略空行和重复标志。如果 $add 参数为 false,则将标志从 flags 中移除(如果此标志不在 flags 中,则忽略)。返回调用对象的引用。

  • massFlags(array $flags, bool $add = true): self - 将$flags参数中指定的值添加到flags属性中。当$flags传递空数组时抛出异常。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • massFlagsAssoc(array $flags): self - 将$flags参数中指定的值添加到flags属性中。当$flags传递空数组时抛出异常。$flags参数必须是一个关联数组,其中键是要添加的标志,值是flagmassFlags方法中的$add。例如,一个如["i" => true, "m" => false]的数组会添加i标志并移除m标志。返回调用对象的引用。

  • inlineFlags(string $inlineFlags, bool $add = true): self - 将$inlineFlags参数中指定的标志添加到flags属性中。$inlineFlags是一系列连续标志的字符串,例如'ims'。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • caseless(bool $add = true) : self - 将i (PCRE_CASELESS) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • multiline(bool $add = true) : self - 将m (PCRE_MULTILINE) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • dotAll(bool $add = true) : self - 将s (PCRE_DOTALL) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • extended(bool $add = true) : self - 将x (PCRE_EXTENDED) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • anchored(bool $add = true) : self - 将A (PCRE_ANCHORED) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • dollarEndOnly(bool $add = true) : self - 将D (PCRE_DOLLAR_ENDONLY) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • extraAnalysisOfPattern(bool $add = true) : self - 将S (额外分析) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • ungreedy(bool $add = true) : self - 将U (PCRE_UNGREEDY) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • extra(bool $add = true) : self - 将X (PCRE_EXTRA) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • infoJChanged(bool $add = true) : self - 将J (PCRE_INFO_JCHANGED) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • utf8(bool $add = true) : self - 将u (PCRE_UTF8) 标志添加到flags属性中。否则,其工作方式类似于flag方法。返回调用对象的引用。

  • clearFlags(): self - 将flags属性设置为空字符串。返回调用对象的引用。

内联修饰符

允许的本地(内联)修饰符列表:imsxUJ

  • insertModifiers(array $activeModifiers = [], array $deactiveModifiers = []): self - 通过向 pattern 属性添加形式为 (?*-*) 的字符串构造来设置内联修饰符,其中破折号前的 * 是活动修饰符($activeModifiers),破折号后的 * 是要禁用的修饰符($deactiveModifiers)。与 flag 方法不同,不允许将空字符串作为内联修饰符传递。重复的值将被忽略($activeModifiers 优先)。如果 $activeModifiers$deactiveModifiers 都为空数组,将抛出异常。返回调用对象的引用。

模式

  • addPattern(string $string, bool $quote = false): self - 向 pattern 属性添加由 $string 参数传入的字符串。如果 $quote 参数为 true,则将应用 $string 函数 preg_quote。返回调用对象的引用。

  • startsWith(string $string = '', bool $quote = false): self - 通过在 pattern 的开头添加元字符 ^ 来声明数据的开始(或多行模式下的字符串)。在元字符之后直接连接 string 参数传入的字符串。否则,其工作方式类似于 addPattern 方法。返回调用对象的引用。

  • endsWith(string $string = '', bool $quote = false): self - 通过在 pattern 的末尾添加元字符 $ 来声明数据的结束,或行尾之前(或多行模式下的行尾)之前。在元字符之前直接连接 string 参数传入的字符串。否则,其工作方式类似于 addPattern 方法。返回调用对象的引用。

  • or(string $string = '', bool $quote = false): self - 通过在 pattern 属性中添加元字符 | 来开始条件选择分支。在元字符之后直接连接 string 参数传入的字符串。否则,其工作方式类似于 addPattern 方法。返回调用对象的引用。

  • anyCharacter(): self - 搜索匹配任何字符(默认情况下除外换行符)通过在 pattern 属性中添加元字符 .(点)来搜索。返回调用对象的引用。

  • openGroup(): self - 通过在 pattern 属性中添加元字符 ( 来声明子模式的开始。返回调用对象的引用。

  • closeGroup(): self - 通过在 pattern 属性中添加元字符 ) 来声明子模式的结束。返回调用对象的引用。

  • alphaNum(bool $except = false): self - 搜索所有/除了字母数字字符通过在 pattern 属性中添加元字符 \w 如果 $except 参数为 false\W 如果它是 true。返回调用对象的引用。

  • whiteSpace(bool $except = false): self - 搜索所有/除了空白字符通过在 pattern 属性中添加元字符 \s 如果 $except 参数为 false\S 如果它是 true。返回调用对象的引用。

  • whiteSpaceVertical(bool $except = false): self - 搜索所有/除了垂直空白字符通过在 pattern 属性中添加元字符 \v 如果 $except 参数为 false\V 如果它是 true。返回调用对象的引用。

  • whiteSpaceHorizontal(bool $except = false): self - 通过将 \h 元字符添加到 pattern 属性,搜索所有/除了水平空白字符。如果 $except 参数为 false,则添加 \h;如果为 true,则添加 \H。返回调用对象的引用。

  • digit(bool $except = false): self - 通过将 \d 元字符添加到 pattern 属性,搜索所有/除了数字。如果 $except 参数为 false,则添加 \d;如果为 true,则添加 \D。返回调用对象的引用。

  • borderOfWord(bool $except = false): self - 通过将 \b 元字符添加到 pattern 属性,搜索所有/除了单词边界。如果 $except 参数为 false,则添加 \b;如果为 true,则添加 \B。返回调用对象的引用。

  • startOfLine(): self - 通过将 \A 元字符添加到 pattern 属性,声明行首。返回调用对象的引用。

  • endOfLine(): self - 通过将 \Z 元字符添加到 pattern 属性,声明行尾。返回调用对象的引用。

  • endOfAction(): self - 通过将 \G 元字符添加到 pattern 属性,声明动作结束。返回调用对象的引用。

  • openAnyOf(bool $except = false): self - 通过将 [ 元字符添加到 pattern 属性,声明字符类声明的开始。如果 $except 参数为 false,则添加 [;如果为 true,则添加 [^。返回调用对象的引用。

  • closeAnyOf(): self - 通过将 ] 元字符添加到 pattern 属性,声明字符类声明的结束。返回调用对象的引用。

  • backReference(int $num): self - 通过将字符串构造形式 \\* 添加到 pattern 属性,声明回溯引用,其中 * 是通过 $num 参数传递的数字。返回调用对象的引用。

  • look(bool $ahead, bool $except = false, string $string = '', bool $quote = false): self - 通过将以下元字符之一添加到 pattern 属性,根据 $ahead$except 参数搜索匹配元素

    • ?= - $aheadtrueexceptfalse
    • ?! - $aheadtrueexcepttrue
    • ?<= - $aheadfalseexceptfalse
    • ?<! - $aheadtrueexcepttrue

string 参数中传递的字符串将直接连接到元字符之后。否则,它的工作方式类似于 addPattern 方法。返回调用对象的引用。

  • range(string $from, string $to): self - 通过将形式为 *-* 的字符串构造添加到 pattern 属性,声明字符范围,其中破折号之前是参数 $from,之后是参数 $to。返回调用对象的引用。

  • clearPattern(): self - 将 pattern 属性设置为空字符串。返回调用对象的引用。

量词

参数 $lazy 指定贪婪/懒惰模式(默认情况下,所有量词都在贪婪模式下工作)。

  • zeroOrMore(bool $lazy = false, string $string = '', bool $quote = false): self - 将 *(0次或多次出现)量词添加到 pattern 属性。在 string 参数中传递的字符串将直接连接到量词之前。否则,它的工作方式类似于 addPattern 方法。返回调用对象的引用。

  • oneOrMore(bool $lazy = false, string $string = '', bool $quote = false): self - 将“+”(1次或多次出现)的量词添加到“pattern”属性。在“string”参数中传递的字符串将直接连接到量词之前。否则,其工作方式与“addPattern”方法类似。返回调用对象的引用。

  • zeroOrOne(bool $lazy = false, string $string = '', bool $quote = false): self - 将“?”(0次或1次出现)的量词添加到“pattern”属性。在“string”参数中传递的字符串将直接连接到量词之前。否则,其工作方式与“addPattern”方法类似。返回调用对象的引用。

  • exactly(int $num, bool $lazy = false): self - 将形式为“{*}”的字符串构造(精确次数)添加到“pattern”属性,其中“*”是“$num”参数中传递的数字。返回调用对象的引用。

  • atLeast(int $num, bool $lazy = false): self - 将形式为“{*,}”的字符串构造(最小次数)添加到“pattern”属性,其中“*”是“$num”参数中传递的数字。返回调用对象的引用。

  • atMax(int $num, bool $lazy = false): self - 将形式为“{,*}”的字符串构造(最大次数)添加到“pattern”属性,其中“*”是“$num”参数中传递的数字。返回调用对象的引用。

  • between(int $min, int $max, bool $lazy = false): self - 将形式为“{*,*}”的字符串构造(给定范围内的出现次数)添加到“pattern”属性,其中逗号之前的“*”是“$min”参数中传递的数字,之后的“*”是“$max”参数中传递的数字。返回调用对象的引用。