【发布时间】:2010-12-26 08:12:39
【问题描述】:
我有一个命令行应用程序需要支持以下品牌的参数:
- 全部:返回所有内容
- 搜索:返回第一个匹配项进行搜索
- all*search:返回匹配搜索的所有内容
- X*search:返回前 X 个匹配项进行搜索
- search#Y:返回第 Y 个匹配项进行搜索
search 可以是单个关键字,也可以是空格分隔的关键字列表,由单引号分隔。关键字是一个或多个字母和数字的序列 - 仅此而已。
几个例子可能是:
- 2*foo
- 栏#8
- 所有*'foo bar'
这听起来很复杂,以至于想到了 flex/bison - 但是应用程序可能需要非常频繁地解析这样的字符串,我觉得(因为不涉及计数)一个成熟的解析器会完全产生开销太大。
你会推荐什么?一长串的字符串操作?一些强大的子模式捕获正则表达式? “真正的”解析器实际上有一个合理的论据吗?
请注意,此伪语法的语法不会更改,因此如果代码变得难以维护,我不会哭泣。这一切都在 C++ 中,如果有什么不同的话。
谢谢!
【问题讨论】:
-
我会说“这听起来简单足以手动编码。”在没有 lex/yacc/regexp 的情况下,我做了比这更复杂的解析。
-
我喜欢你的观点——事实上,我已经退后一步,重新审视了这个问题,现在看到了普通字符串操作可以轻松解决这个问题。
标签: c++ regex parsing command-line string