alshahawi/xpressions

一个流畅的 PHP 正则表达式 API。

dev-master 2017-03-02 10:04 UTC

This package is auto-updated.

Last update: 2024-09-08 07:14:43 UTC


README

一个流畅的 PHP API 用于正则表达式。

安装

Xpressions 目前尚未准备好投入生产,但您可以通过 composer 安装它:

composer require alshahawi/xpressions:dev-master

示例

创建实例

$matcher = Xpressions::match();

匹配字符串

$matcher = Xpressions::match()->exact('foo');

var_dump($matcher->test('bar')); // -> false
var_dump($matcher->test('foo')); // -> true

内联匹配

在某些情况下(如验证),您可能想要匹配行首和行尾的内容,在这种情况下,您可以使用 begin()end() 方法。例如

$matcher = Xpressions::match()->begin()->exact('bar')->end();

var_dump($matcher->test('foo bar')); // -> false
var_dump($matcher->test('bar foo')); // -> false
var_dump($matcher->test('bar'));     // -> true

注意:如果没有使用 begin()end(),上述所有测试都将匹配(返回 true),因为无论匹配的是行首还是行尾,除非指定了行首和行尾(整个文本),否则将返回 true。

匹配可选字符串

$matcher = Xpressions::match()->exact('foo')->maybe('bar')->exact('baz');

var_dump($matcher->test('foo'));       // -> false
var_dump($matcher->test('foobar'));    // -> false
var_dump($matcher->test('foobarbaz')); // -> true
var_dump($matcher->test('foobaz'));    // -> true

匹配字母数字和下划线

$matcher = Xpressions::match()->word();

var_dump($matcher->test('!')); // -> false
var_dump($matcher->test('a')); // -> true
var_dump($matcher->test('1')); // -> true
var_dump($matcher->test('_')); // -> true

您可以使用 words() 匹配一个或多个单词字符。

您可以使用 nonWord() 作为此方法的逆操作。

匹配数字

$matcher = Xpressions::match()->digit();

var_dump($matcher->test('!')); // -> false
var_dump($matcher->test('a')); // -> false
var_dump($matcher->test('1')); // -> true

您可以使用 digits() 匹配一个或多个数字。

您可以使用 nonDigit() 作为此方法的逆操作。

匹配给定值中的任意一个

$matcher = Xpressions::match()->any('foo', 'bar', 'baz');

var_dump($matcher->test('something')); // -> false
var_dump($matcher->test('foo'));       // -> true
var_dump($matcher->test('bar'));       // -> true
var_dump($matcher->test('baz'));       // -> true

高级示例

匹配电子邮件地址

$matcher = Xpressions::match()
    ->begin() // match a line start
    ->oneOrMore(function($xpr) {
        $xpr->word()->or('.');
    })
    ->exact('@')
    ->words()
    ->oneOrMore(function($xpr) {
        $xpr->maybe('.')
            ->word();
    })
    ->end(); // match a line end

var_dump($matcher->test('invalid'));        // ->false
var_dump($matcher->test('me@example.com')); // ->true

想了解更多高级示例吗?

许多示例将很快被编写和记录,但现在您可以查看 tests/XpressionsTest.php