Простая абстракция для preg_* функций на PHP 7.1

938
.
Think different
Репозиторий на гитхабе: https://github.com/folour/regex

Реализованы функции
- preg_split
- preg_match
- preg_match_all
- preg_replace
- preg_replace_callback

Установка

composer require folour/regex



Использование
<?php declare(strict_types=1);

use Folour\Regex\Regex;

$content = 'Test [string], test [value]';
$re = new Regex($content);

/*
 * Replace example
 * this method returns a new instance with replaced string as content
 * Regex object returns content when converts to string
 */
$replaced = $re->replace('/test/i', 'replaced');
//Converts to string and print text 'replaced [string], replaced [value]'
echo $replaced;

//fluent replacement
$replaced = $re
    ->replace('/test/i', 'replaced')
    ->replace('/replaced/', 'double_replaced');

echo $replaced;//'double_replaced [string], double_replaced [value]

//callback replacement
$replaced = $re->replace('/\[([a-z]+)\]/i', function($matches) {
    return sprintf('[replaced_%s]', $matches[1]);
});
echo $replaced; //'Test [replaced_string], test [replaced_value]'

/*
 * find matches
 */
//first match
$m = $re->find('/\[(?P<matched>[a-z]+)\]/');
var_dump($m);
// array(
//   'matched' => 'string'
// )

//all matches
$m = $re->findAll('/\[(?P<matched>[a-z]+)\]/');
var_dump($m);
// array(
//   0 => array(
//     'matched' => 'string'
//   ),
//   1 => array(
//     'matched' => 'value'
//   )
// )

/*
 * Split string
 */
$parts = $re->split('/\,\s?/');
var_dump($parts);
// array(
//   0 => 'Test [string]',
//   1 => 'test [value]'
// )
.
(\/)____o_O____(\/)
Folour, видел подобный класс для работы с массивами
.
Расскажите для нубов, что здесь происходит?
.
(\/)____o_O____(\/)
intelligent, стандартные функции собраны в классе для удобства
.
(\/)____o_O____(\/)
Folour, будешь ещё писать для строк или массивов?
.
Hey guys! Finally I'm gonna change status!?
# Koenig (09.06.2017 / 11:59)
intelligent, стандартные функции собраны в классе для удобства
Думаю, они себя и там, где им быть положено, не плохо чувствуют
А где он сам класс то?
.
Koenig
(\/)____o_O____(\/)
kantry, ну в репе
и на пакажисте ещё должен быть
.
Hey guys! Finally I'm gonna change status!?
Koenig, Точно когда же я внимательным стану
.
╭∩╮ (`-`) ╭∩╮
На мое мнение, идея по абстракции функции для работы с регулярными выражениями интересна, но в данном пакете практически не реализована.

1) Инициализировать класс сразу с контентом я считаю неудобно. Сам пакет представляет из себя набор методов-хелперов которые очень редко будут применяться в виде "несколько штук к одним данным". Данные необходимо "скармливать" непосредственно применяемому методу.

2) Методы, представляющие из себя простую упаковку стандартной функции РНР не интересны. Я могу применить непосредственно саму функцию, не напрягаясь никакой абстракцией и инициализацией класса.

Но сама идея по абстракции регулярных выражений интересна. Я бы с удовольствием видел бы пакет, который абстрагирует большинство стандартных паттернов. Чтоб человек, даже не знакомый с регулярными выражениями мог бы им пользоваться.
По принципу, как делаются SQL Query Builder, там ты даже не зная принципов SQL можешь писать вменяемые запросы (гипотетически разумеется. На практике же, работать с базой не зная ее принципов - это моветон).
.
Hey guys! Finally I'm gonna change status!?
AlkatraZ, Это уже будет валидатор, не думаю что еще и хелпер нужно писать.
Всего: 22