zoukankan      html  css  js  c++  java
  • 解析命令行的正则表达式

    问题

    最近在做一个控制台的程序,程序提供给用户几个命令。每个命令都可以接受多个参数,参数可以有值也可以没值。另外,如若参数中有空格则可用双引号(“”)把参数括起来以表示是一个整体。一些简单的命令例子如下:

    regularCommand argument /a: value  /b: value2   /argument:  value3
    regularCommand argument /a: value  /b: value2   /argument:  value3 /argumentWithouValue
    regularCommand /a:value /b:value2 anotherArgument /argument:value3
    commandWithSpaces "c:\Program files\application" /a: value /b:valu2 /c:"c:\windows\some folder"
    commandWithSingleQuote  "this is a 'test string' with 'single quote'"  /a:"%&*^@special arguments" /b:value2

    解决方法

    对于命令行字符的处理中,关键的一个问题是如何正确解析命令的名字,以及命令的每一个参数和值。对于这个任务,正则表达式能很好的完成,从而省去程序员大量的手动code解析的工作,而且手动code解析比较容易出错。经过长时间的分析及测试,我得出如下表达式:

    /\s*(".+?"|[^:\s])+((\s*:\s*(".+?"|[^\s])+)|)|(".+?"|[^"\s])+

    对前述示例命令行的测试结果如下 (测试工具RegExr):

    image

    从图片中可以看出,命令名和各参数块都被正确的识别出。

    接下来的一个重要任务是如何解析各参数名字和参数的值。首先,解析参数名字。这个相对比较简单,因为参数都是以“/”开头的,因此表达式如下:

    /\s*(".+?"|[^:\s])+(?=[:\s])

    对前述示例命令的测试结果如下:

    image

    从图片中看出,各参数的名字都被正确解析出。

    有了参数的名字,则剩余部分为参数的值(注意,需要去掉分隔符“:”)。

    结论

    处理(查找,匹配,替换等)复杂字符串时,正则表达式有其无可替代的优势。在应用程序中正确的应用正则表达式可以减少代码量并减少错误发生的几率。

  • 相关阅读:
    [Robot Framework] Robot Framework用Execute Javascript对XPath表示的元素执行scrollIntoView操作
    一台机器管理其他都装有kvm的实体机的虚拟机
    阿里云服务器问题
    开发族的跨域问题
    mysql不能连接的原因
    网络命令
    mysql5.7报错端口占用,服务起不来
    nagios的原理及server端跟client端安装配置全部过程
    查看CPU数量和核心数
    iptables的生产场景w
  • 原文地址:https://www.cnblogs.com/lsp/p/2157985.html
Copyright © 2011-2022 走看看