Skip to content

VincentVanWijk/fluent-regex

Repository files navigation

A package to fluently create regular expressions

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •