slexx / pattern
v1.2.1
2017-07-31 07:19 UTC
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2024-09-08 06:59:19 UTC
README
安装
$ 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