vincentvanwijk/fluent-regex

一个用于流畅创建正则表达式的包

v0.0.2-alpha 2023-03-18 14:29 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status PHPStan codecov Total Downloads

安装

您可以通过composer安装此包

composer require vincentvanwijk/fluent-regex

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag=":fluent-regex-config"

使用方法

首先在FluentRegex类上调用create函数。

它需要一个字符串作为参数,该字符串是要执行正则表达式的对象。

第二个参数是分隔符,默认为'/'

use VincentVanWijk\FluentRegex\Facades\FluentRegex;

$fluentRegex = FluentRegex::create("foo bar baz");

您可以通过在FluentRegex对象上链式调用方法来向正则表达式添加令牌。

/foo\s[bar baz]+/
$fluentRegex->exactly("foo")
    ->whiteSpace()
    ->anyCharacterOf('bar baz')
    ->oneOrMoreTimes();

需要转义的字符将自动进行转义。

/regex\!/
$fluentRegex->exactly("regex!")

大多数方法都可以使用not修饰符进行否定。

/[a-zA-Z]/
$fluentRegex->letter();
/[^a-zA-Z]/
$fluentRegex->not->letter();

分组

例如捕获组之类的分组结构需要一个匿名函数作为参数。
匿名函数需要一个FluentRegex对象作为参数。
在这个对象上,您可以继续链式调用方法来创建捕获组的子模式。

/foo (bar baz)/
$fluentRegex->exactly("foo ")      
    ->capture(function (FluentRegex $regex) {
         return $regex->exactly('bar') 
         ->whiteSpace()
         ->exactly('baz')       
    })

返回结果

您可以调用match()方法来返回一个包含匹配项的数组。
第一个索引[0]包含匹配完整模式的文本,第二个索引[1]将包含匹配第一个子模式的文本,依此类推。

$fluentRegex->match();

或者调用matchAll()方法来返回一个包含所有匹配项的多维数组。第一个索引[0]是一个包含完整模式匹配项的数组,第二个索引[1]是匹配第一个子模式的字符串数组,依此类推。

$fluentRegex->matchAll();

要获取正则表达式的字符串表示形式,请调用

$fluentRegex->get();

测试

composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。