【问题标题】:Regex for application parameters应用程序参数的正则表达式
【发布时间】:2017-05-07 17:45:13
【问题描述】:

所以,标题是怎么说的。如何使用正则表达式提取应用程序参数?
我试过:--.*,但我希望它不匹配,除非它后面有任何字符(空格除外)。所以,这个:--version hello 将匹配 --version,但是 -- hello 不会匹配任何东西。 (注意--hello之间有一个空格)

我不想使用任何其他库。 (事实上​​我不能,因为我正在使用 Flex lexer)

有什么想法吗?
马修

【问题讨论】:

  • 不太确定你想要达到什么目的,但是......你可以看看boost program options
  • @G.M.对不起。我会编辑。忘了提到我正在使用 flex,所以除了纯正则表达式之外,我不能使用任何其他库。感谢您查看它。
  • @Galik 请搜索有关 Flex 和 Bison 的信息。它们生成词法分析器和解析器。获取输入数据的唯一方法是将正则表达式与输入匹配,然后您最终可以输出包括此在内的内容。
  • 在 Windows 上,应用程序命令和参数由系统进程解析。这调用 CreateProcess,填充 argv 和 argc 参数。在提交给操作系统之前,您是否将其作为完整的字符串?见this(?:^[ \t]*((?>[^ \t"\r\n]+|"[^"]+(?:"|$))+)|(?!^)[ \t]+((?>[^ \t"\\\r\n]+|(?<!\\)(?:\\\\)*"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"{1,2}|(?:\\(?:\\\\)*")+|\\+(?!"))+)|([^ \t\r\n]))

标签: c++ regex linux flex-lexer


【解决方案1】:

哎呀

好吧,我在这里问得太快了。无论如何,对于任何有同样问题的人,解决方案是:

--\S+

--[^[:space:]]+

-- 将不匹配,--a 将匹配,并且在输入 --a b c 中,只有 --a 将匹配。为任何正在寻找解决方案的人干杯。

【讨论】:

  • 据我所知,flex 无法识别\S;你应该使用[^[:space:]](或[[:^space]],但第一个是Posix兼容的,所以它可以在其他正则表达式引擎中工作。)
  • @rici 欢呼。但是,它不会给我一个错误或任何东西,并且它可以工作(据我所知),但如果你认为这更好,那么当然!我现在就改。
  • 它不会给你一个错误,因为 flex 认为 \SS 是同一件事(在一个模式中)。但它不应该与选项匹配。也许该选项正在与其他模式匹配。 (如果您使用 jison,我认为 \S 会起作用;并且还有其他 lex 衍生物可以接受这些东西。但不是 flex。)
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
相关资源
最近更新 更多