Репозиторий на гитхабе:
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]'
// )
Folour, видел подобный класс для работы с массивами
Расскажите для нубов, что здесь происходит?
intelligent, стандартные функции собраны в классе для удобства
Folour, будешь ещё писать для строк или массивов?
# Koenig (09.06.2017 / 11:59)
intelligent, стандартные функции собраны в классе для удобства
Думаю, они себя и там, где им быть положено, не плохо чувствуют
А где он сам класс то?
kantry, ну в репе
и на пакажисте ещё должен быть
Koenig, Точно
когда же я внимательным стану
На мое мнение, идея по абстракции функции для работы с регулярными выражениями интересна, но в данном пакете практически не реализована.
1) Инициализировать класс сразу с контентом я считаю неудобно. Сам пакет представляет из себя набор методов-хелперов которые очень редко будут применяться в виде "несколько штук к одним данным". Данные необходимо "скармливать" непосредственно применяемому методу.
2) Методы, представляющие из себя
простую упаковку стандартной функции РНР не интересны. Я могу применить непосредственно саму функцию, не напрягаясь никакой абстракцией и инициализацией класса.
Но сама идея по абстракции регулярных выражений интересна. Я бы с удовольствием видел бы пакет, который абстрагирует большинство стандартных паттернов. Чтоб человек, даже не знакомый с регулярными выражениями мог бы им пользоваться.
По принципу, как делаются SQL Query Builder, там ты даже не зная принципов SQL можешь писать вменяемые запросы (гипотетически разумеется. На практике же, работать с базой не зная ее принципов - это моветон).
AlkatraZ, Это уже будет валидатор, не думаю что еще и хелпер нужно писать.