vincentvanwijk / fluent-regex
A package to fluently create regular expressions
Requires
- php: ^8.1
- illuminate/contracts: >9.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2025-07-09 04:06:55 UTC
README
Installation
You can install the package via composer:
composer require vincentvanwijk/fluent-regex
You can publish the config file with:
php artisan vendor:publish --tag=":fluent-regex-config"
Usage
Start by calling the create function on the FluentRegex class.
It takes the string that the regex is to be performed on as a parameter.
The second parameter is the delimiter, which defaults to '/'
.
use VincentVanWijk\FluentRegex\Facades\FluentRegex; $fluentRegex = FluentRegex::create("foo bar baz");
You can add tokens to the regex by chaining methods on the FluentRegex object.
/foo\s[bar baz]+/
$fluentRegex->exactly("foo") ->whiteSpace() ->anyCharacterOf('bar baz') ->oneOrMoreTimes();
Characters that need it will be escaped automatically.
/regex\!/
$fluentRegex->exactly("regex!")
Most methods can be negated using the not
modifier.
/[a-zA-Z]/
$fluentRegex->letter();
/[^a-zA-Z]/
$fluentRegex->not->letter();
Grouping
Grouping constructs such as capturing groups take an anonymous function as a parameter.
The anonymous function takes a FluentRegex object as a parameter.
On this object you can continue to chain methods to create the sub-pattern for the capture group.
/foo (bar baz)/
$fluentRegex->exactly("foo ") ->capture(function (FluentRegex $regex) { return $regex->exactly('bar') ->whiteSpace() ->exactly('baz') })
Returning results
You can call the match()
method to return an array with the matches.
The first index [0]
contains the text that matched the full pattern,
The second index [1]
will contain the text that matched the first subpattern, and so on.
$fluentRegex->match();
Or call the matchAll()
method to return a multidimensional array with all matches.
The first index [0]
is an array of full pattern matches
The second index [1]
is an array of strings matched by the first subpattern, and so on.
$fluentRegex->matchAll();
To get the regex in its string representation, call
$fluentRegex->get();
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.