每天laravel-20160719|Parser

php中文网
发布: 2016-06-20 12:31:12
原创
957人浏览过

<?phpnamespace illuminate\console;use illuminate\support\str;use invalidargumentexception;use symfony\component\console\input\inputoption;use symfony\component\console\input\inputargument;// my name spaceclass parser{    /**     * parse the given console command definition into an array.     *     * @param  string  $expression     * @return array     *     * @throws \invalidargumentexception     */    public static function parse($expression)//parse the given console command definition into array.    {        if (trim($expression) === '') {            throw new invalidargumentexception('console command definition is empty.');        }// trim the expression ,if have the null       // throw new        preg_match('/[^\s]+/', $expression, $matches);// get you  want value in the big date.        if (isset($matches[0])) {// is has the match value ,only get one            $name = $matches[0];// use the name to save the matches[0] value        } else {            throw new invalidargumentexception('unable to determine command name from signature.');        }// else throw new trouble.        preg_match_all('/\{\s*(.*?)\s*\}/', $expression, $matches);// get all the value that be match        $tokens = isset($matches[1]) ? $matches[1] : [];// $tokens check the matches        if (count($tokens)) {// count($tokens) count array(); this is the matches results            return array_merge([$name], static::parameters($tokens));// array_merge  parameters ,change the parameters        }        return [$name, [], []];// return the result    }// this is  a change the   // the $name to    /**     * extract all of the parameters from the tokens.     *     * @param  array  $tokens     * @return array     */    protected static function parameters(array $tokens)//extract all of the parameters from the tokens.    {        $arguments = [];// store the arguments        $options = [];// store the options        foreach ($tokens as $token) {// all the tokens as token            if (! str::startswith($token, '--')) {// !str::starswith() get the true of false                $arguments[] = static::parseargument($token);//            } else {                $options[] = static::parseoption(ltrim($token, '-'));// get the options            }        }        return [$arguments, $options];// back the result from tokens    }// one is arguments,   // one is options    /**     * parse an argument expression.     *     * @param  string  $token     * @return \symfony\component\console\input\inputargument     */    protected static function parseargument($token)//parse an argument expression.    {        $description = null;// a store string        if (str::contains($token, ' : ')) {// a function to get the token get the result true or false            list($token, $description) = explode(' : ', $token, 2);// extract the list array to the token and description            $token = trim($token);// trim the token            $description = trim($description);// trim the description        }        switch (true) {// true is value , and the value no break            case str::endswith($token, '?*'):// case 1 set the flag                return new inputargument(trim($token, '?*'), inputargument::is_array, $description);            case str::endswith($token, '*'):// case 2 set the flag                return new inputargument(trim($token, '*'), inputargument::is_array | inputargument::required, $description);            case str::endswith($token, '?'):// case 3 set the flag                return new inputargument(trim($token, '?'), inputargument::optional, $description);            case preg_match('/(.+)\=(.+)/', $token, $matches):// case 4 more different matches                return new inputargument($matches[1], inputargument::optional, $description, $matches[2]);            default:                return new inputargument($token, inputargument::required, $description);        }// change the inputargument value    }    /**     * parse an option expression.     *     * @param  string  $token     * @return \symfony\component\console\input\inputoption     */    protected static function parseoption($token)//parse an option expression    {        $description = null;// parseoption        if (str::contains($token, ' : ')) {// check the str            list($token, $description) = explode(' : ', $token);// list the each()            $token = trim($token);            $description = trim($description);        }// back the token description        $shortcut = null;// null shortcut        $matches = preg_split('/\s*\|\s*/', $token, 2);// split the str by preg.        if (isset($matches[1])) {            $shortcut = $matches[0];            $token = $matches[1];        }// get the value from the token        switch (true) {            case str::endswith($token, '='):// case 1                return new inputoption(trim($token, '='), $shortcut, inputoption::value_optional, $description);            case str::endswith($token, '=*'):// case 2                return new inputoption(trim($token, '=*'), $shortcut, inputoption::value_optional | inputoption::value_is_array, $description);            case preg_match('/(.+)\=(.+)/', $token, $matches):                return new inputoption($matches[1], $shortcut, inputoption::value_optional, $description, $matches[2]);            default:                return new inputoption($token, $shortcut, inputoption::value_none, $description);        }// input option    }// at last you will found is a safe way to get you  input argument or option from a token}
登录后复制


天工
天工

昆仑万维推出的通用AI智能体平台,原天工AI

天工 212
查看详情 天工
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号