正则表达式 VerbalExpressionsPhp使用例子

作者:袖梨 2022-06-25

该类库是jehna/VerbalExpressions的php版本。

这货的竟然通过链式方法把正则给语义化了。。。我表示很愤慨啊。。。

安装

代码如下 复制代码

加入composer.json

{
"require": {
...,
"markwilson/VerbalExpressionsPhp": "dev-master"
}
}

使用

代码如下 复制代码

require_once 'vendor/autoload.php';

use MarkWilson\VerbalExpression;
use MarkWilson\VerbalExpression\Matcher;

// 初始化VerbalExpression实例
$verbalExpression = new VerbalExpression();

// URL地址匹配
$verbalExpression->startOfLine()
->then('http')
->maybe('s')
->then('://')
->maybe('www.')
->anythingBut(' ')
->endOfLine();

// 编译表达式 - 返回: ^(http)(s)?(\:\/\/)(www\.)?([^\ ]*)$
$verbalExpression->compile();

// 执行匹配
preg_match($verbalExpression, 'https://www.111cn.net'); // 返回 1
// 或
$matcher = new Matcher();
$matcher->isMatch($verbalExpression, 'http://www.g*o*o*gle.com'); // 返回 true

嵌套表达式

代码如下 复制代码

$innerExpression = new VerbalExpression();
$innerExpression->word();

$outerExpression = new VerbalExpression();
$outerExpression->startOfLine()
->find($innerExpression)
->then($innerExpression)
->endOfLine();

// 返回 ^(\w+)(\w+)$
$outerExpression->compile();

禁用子模式捕获

默认情况下,子匹配规则可以被获取,并返回匹配的数组。

代码如下 复制代码

// 禁用获取子匹配规则
$verbalExpression->disableSubPatternCapture()->word(); // (?:\w+)
// 或
$verbalExpression->word(false); // (?:\w+)

这样做只会影响后续增加的表达式;任何已经添加的匹配规则不会受到影响。这里允许禁用和启用组。

代码如下 复制代码


// 相当于 (\w+)(?:\w+)(?:\w+)(\w+)
$verbalExpression->word()
->disableSubPatternCapture()
->word()
->word()
->enableSubPatternCapture()
->word();

相关文章

精彩推荐