vincentvanwijk/fluent-regex

A package to fluently create regular expressions

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

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.