slexx/pattern

v1.2.1 2017-07-31 07:19 UTC

This package is auto-updated.

Last update: 2024-09-08 06:59:19 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

安装

$ composer require slexx/pattern

基本使用

这是一种类似于正则表达式的模板语言,但更加简单。主要类只有几个方法,语言本身简单易懂。它被编译成正则表达式。

模板示例

/users[/<id:int>[/<action:edit|delete>]]

它编译成以下正则表达式

/^\/users(?:\/(?P<id>[1-9][0-9]*|0)(?:\/(?P<action>edit|delete))?)?(?:\/)?$/

第一个版本更容易阅读,也更容易操作。

使用示例

use Slexx\Pattern\Pattrn;

$pattern = new Pattern('/users/<id:int>');
var_dump($pattern->match('/users/5')); // -> ['id' => 5]

文档

文本

在非语言语法单元的任何文本中,所有正则表达式符号都将被屏蔽。

非必需

所有可能存在于文本中的非必需部分可以用方括号括起来。

参数

参数用小于号和大于号括起来,可以用来查找文本的某个部分。

规则

在参数中可以通过冒号指定用于验证参数的规则名称或正则表达式。

设置规则

可以通过rule方法设置规则,其中第一个参数是参数名,第二个参数是正则表达式。

$pattern = new Pattern('users show <id:slug>');
$pattern->rule('slug', '[\w\d\-]+');

$pattern->match('users show alex1234'); 
// -> ['slug' => 'alex1234'];

$pattern->match('users show {}+'); 
// -> null
标准规则

为了方便,已经实现了一些规则,以下是它们的列表

默认规则

如果没有指定规则,将使用以下正则表达式: .+

类型转换

对于某些标准规则,可以进行类型转换

  • int, integer
  • float, double
  • bool, boolean

对于所有其他情况,返回字符串。

$pattern = new Pattern('users list[ --verbose[ <verbose:bool>]][ --offset <offset:int>][ --limit <limit:int>]');

$pattern->match('users list --verbose on --offset 5'); 
// -> ['verbose' => true, 'offset' => 5, 'limit' => null];

默认值

对于布尔类型,默认返回 false,对于所有其他类型,返回 null。可以通过 default 方法指定默认值,第一个参数是参数名,第二个参数是默认值。

$pattern = new Pattern('users list[ --verbose[ <verbose:bool>]][ --offset <offset:int>][ --limit <limit:int>]');

$pattern->default('limit', 50);
$pattern->default('verbose', true);

$pattern->match('users list --offset 5'); 
// -> ['verbose' => true, 'offset' => 5, 'limit' => 50];

检查

有一个名为 is 的方法可以用来检查文本是否与模板匹配,它接受一个字符串作为第一个参数并返回一个 boolean

$pattern = new Pattern('users/<id:int>[/]');
$pattern->is('users'); // -> false
$pattern->is('users/5'); // -> true
$pattern->is('/users/5/'); // -> true