幽灵作者 / plex
提供PHP最快的词法分析器,使用命名正则表达式模式进行文本标记以提高处理效率
0.1.3
2024-09-05 17:49 UTC
Requires
- php: >=8.3
Requires (Dev)
- ghostwriter/coding-standard: dev-main
This package is auto-updated.
Last update: 2024-09-05 17:52:06 UTC
README
提供PHP最快的词法分析器,使用命名正则表达式模式进行文本标记以提高处理效率。
安装
您可以通过composer安装此包
composer require ghostwriter/plex
如果觉得这个仓库有用,请给它加星标 ⭐️
您也可以给这个仓库加星标(🌟)以便稍后更容易找到。
使用方法
<?php declare(strict_types=1); use Ghostwriter\Plex\Grammar; use Ghostwriter\Plex\Token; use Ghostwriter\Plex\Lexer; $grammar = Grammar::new([ 'T_NUMBER' => '\d+', 'T_DOT' => '\.' ]); $lexer = Lexer::new($grammar); $expected = [ Token::new('T_NUMBER', '1', 1, 1, []), Token::new('T_DOT', '.', 1, 2, []), Token::new('T_NUMBER', '2', 1, 3, []), Token::new('T_DOT', '.', 1, 4, []), Token::new('T_NUMBER', '3', 1, 5, []), ]; $content = '1.2.3'; assert($expected == iterator_to_array($lexer->lex($content)));
命名模式
在定义语法时,您可以使用(?&NAME)
语法通过名称引用其他语法规则,其中NAME
是语法规则的名称。
这允许您创建更易于阅读和维护的复杂模式。
<?php declare(strict_types=1); use Ghostwriter\Plex\Grammar; use Ghostwriter\Plex\Token; use Ghostwriter\Plex\Lexer; $grammar = Grammar::new([ // References both 'T_NUM' and 'ref-str' (which references T_STR) 'T_ID' => '(?:(?&T_NUM)|(?&ref-str))*', // Matches numbers 'T_NUM' => '\d+', // Matches word characters 'T_STR' => '\w+', // References T_STR 'ref-str' => '(?&T_STR)', ]); $lexer = Lexer::new($grammar); $expected = [ Token::new('T_ID', '456def', 1, 6, []) ]; $content = '456def'; assert($expected == iterator_to_array($lexer->lex($content)));
鸣谢
更新日志
请参阅CHANGELOG.md以获取最近更改的更多信息。
许可证
请参阅LICENSE以获取适用于此项目的许可证的更多信息。
安全
请参阅SECURITY.md以获取有关安全披露过程的更多信息。