询问一个用boost库解析一个命令行的正则表达式

byssx752 2008-03-13 05:01:18
想用boost的regex库编写一个正则表达式解析命令行,如下:
test -a NUM -b NUM -c NUM
NUM代表数字,可只输入一个或者两个或者三个都输入,现在想写个正则表达式匹配上述格式,要求命令不能重复不能test -a 13 -a 12,命令出现顺序无关,例如test -a 12 -b 13和test -b 13 -a 12都可以。
请问这个要求能用正则表达式解决吗?非常感谢!
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oversense 2008-04-04
  • 打赏
  • 举报
回复
不是很好办
禽兽v5 2008-04-04
  • 打赏
  • 举报
回复
命令行解析,不需要正则匹配全串,用来匹配参数部分就行

(\-([a-zA-Z]+)[\s]*([\d]+))
匹配出-a 12这个部分,匹配出来子组a和12,放到std::map里,用find函数判断是否重复即可
  • 打赏
  • 举报
回复
这个同意taodm的意见
不用正则会很方便.
我啃 2008-04-03
  • 打赏
  • 举报
回复
masterz也来这里啊~
masterz 2008-04-03
  • 打赏
  • 举报
回复
用boost.program_option library.
taodm 2008-03-13
  • 打赏
  • 举报
回复
其实,你没有必要一定要靠正则自己来检查-a是否重复,那会造成写出的正则很复杂。
1、系统和网络编程:ACE 除了ACE之外,还有很多系统和网络编程方面的程序。比如在线程方面,还有ZThread、boost::thread,如果放大到C/C++领域,还有APR,还有CII。在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的C ++0X中几乎肯定有一个网络编程和一个线程。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位在一段时间内不会被撼动。它不但是一个实用的程序、框架集,还是一个典范的设计模式应用范例,非常值得学习。 2、GUI:Qt 传统上Qt被认为是可移植的GUI,但实际上Qt现在已经是一个比较完整的可移植应用程序框架了,其中包含了大量的工具,比如正则表达式、Web和 Socket类、2D和3D图形、XML解析、SQL类等,甚至还包括了一个完整的容器类,不过其王牌还是GUI。在目前的跨平台GUI框架中,Qt成熟度最高,已经被一些大公司应用在关键产品中。由于Trolltech对Qt采用的dual license模式,该产品既可以从开源社区获得支持,又能够赚取足够的商业利润,因此其前景也令人比较有信心。 Qt的主要技术特色是其元对象模型。Qt实际上使用的并不是标准的C++,而是标准C++的一个扩展。它通过元对象模型扩展,实现了著名的signal/slot机制,而这一机制也成为Qt的最大特色和优势。 与Qt类似的可移植GUI框架还有wxWidget、FOX等。 3、分布式对象中间件:ICE ICE是分布式对象中间件领域里的后起之秀,可以大致地将其视为“改进版”的CORBA。目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军作战系统。 ICE的一个特别价值是其代码的范例意义。由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。 4、正则表达式boost::regex 正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex,初步解决了这个问题。但是最初的regex无论在效率上还是可靠性方面都有一些问题,后来经过一次大规模的翻修之后,达到了比较完善的程度。 其他可以选择的替代品还有C语言的pcre,Qt中的QRegExp类等。 5、矩阵计算:MTL 自1995年以来,C++在科学计算领域当中取得了巨大的突破。这主要归功于template技术的高级应用,使得C++在科学计算的性能方面取得了巨大的进步,一大批优秀的C++科学计算涌现出来。比如Blitz++、POOMA、MTL、Boost::uBLAS。而这其中,MTL就功能丰富程度、性能、开发支持和成熟程度来讲,是比较突出的一个,因此可以优先考虑。值得一提的是,2002年,MTL与后来被Intel收购的KAI C++配合,曾经在性能评测中击败了FORTRAN。 6、XML、TinyXml C++的XML相关不少,但是大部分其实都是C,使用起来自然不那么轻便。其中基于DOM的有TinyXml,基于SAX的当然是Xerces。前者小巧快捷,便于使用,适合做数据交换。后者则是全功能的XML解析器。 7、内存管理:boost::smart_ptr,Hans-Boehm GC C/C++的内存管理是一个永恒的话题。一般来说,C++的开发者倾向于自己管理内存。然而,出乎很多C++开发者意料的是,近期C++的一些领袖人物已经公开宣称,如果不配备自动内存管理机制,用C++编写安全可靠的大型程序是非常困难的。而Bjarne Stroustrup也曾对中国开发者建议,如果没有特别的理由,应该在大型项目中使用自动内存管理工具。因此,今天的C++开发者应当积极地学习和应用自动内存管理设施。 说到自动内存管理,比较轻量级的做法是boost::smart_ptr,而激进的做法是引入完整的GC机制。目前开源而又比较可靠的GC中,Hans- Boehm GC无疑是最受信赖的。作为一个保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特别是,使用这个**,你仍然可以*elete、free来自己管理内存,对于我们编程习惯的冲击比较小。 8、配置管理:Lua 随着软件系统越来越复杂,对软件的可配置型提出了越来越高的要求。传统上只要通过命令行参数来配置的系统,现在可能需要越来越多的方式和机制。目前越来越受欢迎、并且得到越来越多证实的做法,是将Lua嵌入到C/C++程序中,而用Lua程序作为配置脚本。这种做法的优势是,Lua语言强大灵活,可以适应复杂的配置要求。同时,Lua便于嵌入C/C++程序,而且编译执行速度非常快,可以说是目前解决C/C++程序配置管理问题的一个出色方案。 9、密码及安全:OpenSSL 安全是今天进行C/C++编程无法回避和必须重视的问题。然而编写安全的应用程序,特别是跟网络相关的C/C++应用程序,是一件十分困难的事情。可以说,整个业界目前在这个进程上仍然处于“初级阶段”。特别是涉及到大量的安全、密码学相关的算法、规范,如果让开发者自己摸索,其工作量和难度达到了不现实的程度。因此必须借助可靠的相关程序才有可能提高程序的安全性。在这方面,OpenSSL是目前最好的选择,其内容之全面可靠,已经成为业界标杆。然而,由于安全编程固有的复杂性,即使使用penSSL,开发工作仍然是非常繁琐的。因此我们也希望能够尽快看到更简单、更易用的C/C++安全程序
ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2兼容性图表这一节。 运行IIS服务器SSI(rewrite重写)插件,可在windows的IIS服务器上通过“httpd.conf”文件或将指令“Options +Includes”以ASCII编码写入“.htaccess”格式的文件来开启SSI (Server Side Includes)。 任何路径都可以包含在“.htaccess”格式的文件中(使用“.htaccess”格式的文件会降低服务器速度)。 本资料主要提供完整帮助文件(全英文的chm文件,Release 3.1.0.109)、方便查阅的参考说明(中文)、软件作者网站(全英文)及相关的参考资料,不含插件本身。该软件的精简版(Lite version)免费使用、有部分限制,可以从作者网站免费下载(Freeware字样的是免费版),完整版是收费的。 安装好后记得给ISAPI_Rewrite软件安装目录network service的读权限。 参考说明目录 [转载]ISAPI_REWRITE3.1教程中文版 1 软件介绍 1 2.1系统要求 2 2.2安装程序 2 2.3手工安装 3 2.4反安装 4 2.5运行ISAPI_REWRITE所需的权限 5 2.6 MSI的自定义行为 6 3.1基本概念 11 3.2和APACHE下MOD_REWRITE的兼容性 13 这里有一个完整的ISAPI_Rewrite和mod_rewrite兼容性图表。标记为绿色的功能或指令是充分支持的,黄色的功能是部分支持或计划在下一版本中支持,标示为红色的功能是不支持的。 13 3.3使用环境以及处理顺序 16 字面值 17 通配符 18 重复 18 懒惰型重复 18 插入成份 19 无标记插入 19 N择1标记 19 预置符 19 字符类 20 正则表达式 21 集合元素 21 等价类 21 行锚 22 回溯引用 22 向前查找 23 通配符 23 转义字符 23 单个字符转义序列 23 杂项转义序列 24 怎样得到匹配 24 对“病态”正则表达式的特别提示: 25 4.1ACCESSFILENAME指令 25 4.2ALLOWOVERRIDE指令 26 4.3REWRITEENGINE ON|OFF 26 REWRITEENGINE DIRECTIVE 26 4.4REWRITERULE指令 27 4.5REWRITECOND指令 32 4.6REWRITEBASE指令 34 4.7REWRITEPROXY指令 35 4.8REWRITEHEADER指令 36 4.9REWRITEMAP指令 36 4.10REWRITELOG指令 38 4.11REWRITELOGLEVEL指令 39 4.12REWRITEOPTIONS指令 39 4.13REWRITECOMPATIBILITY2指令 39 4.14ERRORLOG指令 40 4.15LOGLEVEL指令 40 4.16指令 41 4.17指令 41 4.18指令 42 4.19 指令 43 4.20指令 44 4.21指令 44 4.22指令 45 示例&注意: 46 简单的搜索引擎友好的网址 46 富关键词URLS 47 使用IIS作为反向代理 48 藏匿文件扩展名: 49 仿真基于主机头的虚拟网站 49 阻断内联图像(阻止盗链) 50 重定向非WWW的版本到WWW 51 强制SSL或者非SSL到一个指定的位置 51 转移站点位置 52 平衡负荷仿真 52 故障处理 53 精简版的限制 55 使用和传播许可 56 [转载]ISAPI_Rewrite3.1教程中文版 软件介绍 ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2兼容性图表这一节。 ISAPI_Rewrite最重要的功能: ? ISAPI_Rewrite提供了和Apach mod_rewrite相同的句法和行为,使仅仅拷贝.htaccess文件就完成配置移植成为功能。(要想阅读更多关于与mod_rewrite的兼容性,请参阅3.2兼容性图表这一节。) ? 正则表达式支持灵活而强大的配置。 ? 极速而且容易升级的纯C++代码。 ? 真正的分布式配置:实时监控服务器全局级别、虚拟主机(网站)级别、目录级别的.htaccess文件。 ? 隔离性:用户级配置只影响本地用户环境,从而使ISAPI_Rewrite成为Web主机提供商的理想解决方案。 重要的应用示例: ? 搜索引擎优化。 ? 一台Web服务器的代理内容经过另一台web服务器。 ? 防止内容被吸血(盗链)。 ? 阻断特定主机、反向链接或者烦人的搜索机器人。 ? 内容商议:向不同的语言用户或者不同的浏览器用户提供不同的文件。示例 ? 为群集式服务器架构模拟负载均衡。 定价资料 ? 45天的试用期 ? 单机版99美元 ? ISAPI_Rewrite精简版是免费的。在这里可以看到受限的细节说明。 ? 大宗采购可议折扣。 2.1系统要求 ISAPI_Rewrite可以被安装在下列操作系统中: ? Windows 2000 with IIS 5 ? Windows XP with IIS 5.1 ? Windows Server 2003 with IIS 6.0 ? Windows Vista with IIS 7.0 ? Windows Server 2008 with IIS 7.0 在安装ISAPI_Rewrite之前,操作系统中必须先安装IIS。 32位和64位的Windows版本都是支持的,但是你必须下载32位版和64位版两种不同的安装包。Windows Installer 2.0必须运行安装程序。你可以从微软的网站上下载到最新版本的Windows Installer。 在Windows Vista和Windows Server 2008上安装ISAPI_Rewrite,还必须先安装下面两个模块(默认情况下这两个模块是不安装的) ? ISAPI过滤器 ? ISAPI 扩展 2.2安装程序 在运行安装包之前请先阅读系统要求部分。下载并安装某个版本的ISAPI_Rewrite.msi,依照安装向导的说明操作。安装过程是自动的,并有自我描述。ISAPI_Rewrite在自动安装过程中必须重启IIS。下列服务必须被重启:IISADMIN、W3SVC。不需要手工把任何ISAPI筛选器或者扩展加入到网站或者全局列表中。它能够在安装和配置过程中自动完成。 命令行安装 ISAPI_Rewrite也能够通过命令行进行后台安装。请使用以下命令行语法来安装: msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code REGISTRATIONNAME=Name 用命令行来后台反安装ISAPI_Rewrite请使用下面的语法: msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes ...... 对“病态”正则表达式的特别提示: ISAPI_Rewrite 使用了一个非常强大的来自Boost正则表达式引擎。但是它依然有一些局限性:有着一些“病态”的表达式,它可能会指数级地消耗匹配时间。这些都涉及到嵌套重复运算符,例如试图对N个连续字母a匹配表达式“(a*a)*b”,消耗的时间将与N2成正比。这些表达式常常能改成另一种写法来避免这种问题。例如,“(a*a)*b”可以被改写成“a*b”,解析它消耗的时间与N成正比。在多数情况下,非嵌套重复表达式消耗的时间与N2成正比,但是,如果条款是相互排斥的,则它们会在线性时间里完成匹配。在“a*b”这种情况下,每个字符将要么匹配a要么匹配b或者不匹配。相较之下,“a*a”匹配器不能告知哪个分支被采取(第一个 a还是第二个a)因此必须尝试两种。 Regex可以检测出这种“病态”的正则表达式并终止和它们的匹配。这将使ISAPI_Rewrite的规则失效。当一个规则失效时,ISAPI_Rewrite将给客户端发送一个"Internal Server error - Rule Failed"的状态,以表示配置错误。 ...... 精简版的限制 ISAPI_Rewrite的精简版拥有相同的引擎和重写功能。但是也有下面这些限制: ? 不支持分布式.htaccess配置、目录以及网站级配置,只有一个精简版安装目录中的全局的httpd.conf配置能被载入。 ? 不支持 以及这几个标签。 ? 精简版中没有代理服务模块,因而所有的和代理服务功能相关的比如说RewriteProxy指令以及[P]标记都会被忽略。 ? 精简版没有针对于虚拟主机环境的手工安装包 ISAPI_Rewrite精简版完全免费,它对开发或者测试目的以及只有几个网站而且不需要分布式配置或者代理功能的小型服务器来说是一个很好的解决方案 ......

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧