robinbressan / regex-parser
PCRE 正则表达式的 AST
dev-master
2015-11-03 10:51 UTC
Requires (Dev)
- phpspec/prophecy: ~1.0
- phpunit/phpunit: 3.7.32
This package is not auto-updated.
Last update: 2024-09-14 16:08:26 UTC
README
RegexParser 是 PCRE 正则表达式的解析器。它生成一个 AST,表示您的正则表达式。它可以帮助您生成一些与您的正则表达式匹配的输入。
安装
它可以通过 Composer 获取。
composer install robinbressan/regex-parser
用法
要构建一个 AST,您需要创建一个解析器
$parser = \RegexParser\Parser\Parser::create(); $ast = $parser->parse('YOUR_REGEX');
现在您可以使用格式化工具将 AST 转换为几种格式(目前仅支持 XML)
$formatter = new \RegexParser\Parser\Formatter\XMLFormatter(); $xml = $formatter->format($ast); // $xml is now an instance of DOMDocument
如果您愿意,可以轻松显示它
$xml->formatOutput = true; echo $xml->saveXML();
因为您可以获取 DOMDocument,所以您可以使用 XPath 引擎来查询您的 AST。
示例
正则表达式 ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$
将生成以下 AST
<?xml version="1.0" encoding="utf-8"?> <ast> <begin> <repetition min="1"> <block sub-pattern="false"> <token type="underscore">_</token> <character-class> <token type="char">a</token> <token type="char">z</token> </character-class> <character-class> <token type="integer">0</token> <token type="integer">9</token> </character-class> <token type="minus">-</token> </block> </repetition> </begin> <repetition min="0"> <block sub-pattern="true"> <token type="char">.</token> <repetition min="1"> <block sub-pattern="false"> <token type="underscore">_</token> <character-class> <token type="char">a</token> <token type="char">z</token> </character-class> <character-class> <token type="integer">0</token> <token type="integer">9</token> </character-class> <token type="minus">-</token> </block> </repetition> </block> </repetition> <token type="at">@</token> <repetition min="1"> <block sub-pattern="false"> <character-class> <token type="char">a</token> <token type="char">z</token> </character-class> <character-class> <token type="integer">0</token> <token type="integer">9</token> </character-class> <token type="minus">-</token> </block> </repetition> <repetition min="0"> <block sub-pattern="true"> <token type="char">.</token> <repetition min="1"> <block sub-pattern="false"> <character-class> <token type="char">a</token> <token type="char">z</token> </character-class> <character-class> <token type="integer">0</token> <token type="integer">9</token> </character-class> <token type="minus">-</token> </block> </repetition> </block> </repetition> <end> <block sub-pattern="true"> <token type="char">.</token> <repetition min="2" max="4"> <block sub-pattern="false"> <character-class> <token type="char">a</token> <token type="char">z</token> </character-class> </block> </repetition> </block> </end> </ast>
生成器
您也可以根据您的 AST 创建一个生成器,该生成器将生成一个与您的正则表达式匹配的字符串
$generator = new \RegexParser\Generator\RandomGenerator($ast); $generator->generate($seed = null);
如果您愿意,也可以直接创建生成器
$generator = new \RegexParser\Generator\RandomGenerator::create('YOUR_REGEX'); $generator->generate($seed = null);
测试
要运行测试,您必须运行 phpunit
命令。
贡献
所有贡献都受欢迎。如果您添加了一个新功能,请确保所有测试都通过!
许可证
此应用程序可在 MIT 许可证下使用。