multihanded / regent
该Laravel包允许您以声明性方式编写正则表达式。
Requires
- php: ^8.1
- laravel/framework: ^11.0
Requires (Dev)
- orchestra/testbench: ^9.0
- pestphp/pest: ^2.13
- pestphp/pest-plugin-laravel: ^2.2
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 - 将 pattern 和 flags 属性设置为空字符串。如果 $withDelimiter 参数为 true,则分隔符将设置为默认值。返回调用对象的引用。
分隔符
-
static setDelimiterDefault(string $newDelimiter) - 允许您设置默认分隔符。一旦设置,所有新创建的Regent对象都将使用 $newDelimiter 作为其分隔符。不返回任何内容。
-
static getDelimiterDefault(): string - 返回当前默认分隔符的值。
-
getDelimiter(): string - 返回调用对象分隔符的值。
Regent 接受以下字符作为有效分隔符: /、~、@、;、%、` #。默认情况下,默认分隔符为 ~(波浪号)。
您还可以在项目的 AppServiceProvider 中设置默认分隔符
public function boot() { Regent::setDelimiterDefault('%'); }
标志
有效标志列表: i、m、s、x、A、D、S、U、X、J、u。您可以在官方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参数必须是一个关联数组,其中键是要添加的标志,值是flag和massFlags方法中的$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属性设置为空字符串。返回调用对象的引用。
内联修饰符
允许的本地(内联)修饰符列表:i、m、s、x、U、J。
- 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 参数搜索匹配元素
- ?= - $ahead 是 true,except 是 false;
- ?! - $ahead 是 true,except 是 true;
- ?<= - $ahead 是 false,except 是 false;
- ?<! - $ahead 是 true,except 是 true。
在 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”参数中传递的数字。返回调用对象的引用。