一聚教程网:一个值得你收藏的教程网站

热门教程

正则表达式 VerbalExpressionsPhp使用例子

时间:2022-06-25 02:41:24 编辑:袖梨 来源:一聚教程网

该类库是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, 'http://www.111com.net'); // 返回 1
// 或
$matcher = new Matcher();
$matcher->isMatch($verbalExpression, 'http://www.google.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();

热门栏目