【发布时间】:2018-09-05 22:17:05
【问题描述】:
我有以下主要适用于我的用例的 RegEx(CLI 命令解释器):
[^\s"]+|"[^"\\]*(?:\\.[^"\\]*)*"
它匹配以下场景(并成功分离零件):
foo list
foo list --barId ae920cf4-79e7-4c6f-8420-2d64cd6e4ae2
foo list --name "foo's name"
foo create --description "this is a \"description\" with some escaped quotes"
缺少的部分是我已经转义了未被外部未转义双引号包裹的双引号。示例:
bar create --expression service.GetData(\"2194c75c-26be-405a-b264-5a96152d93f8\")
这里,整个“service.GetData”语句应该是一个匹配项,但它在(转义的)双引号处中断。如果我将参数值用双引号括起来,它就可以工作(就像在前面的示例块中一样)。不幸的是,当参数值没有用双引号括起来时,我也需要它。
有人可以帮忙做最后一个吗?
【问题讨论】:
-
你有两次相同的开始模式:[^\s"]+|[^\s"]+
-
复制/粘贴问题,已修复。
-
这看起来像一个 Perl 正则表达式。这是在 Perl 中使用的吗?使用真正的分词器,例如 Text::Parse 的
shellwords()函数。它将处理“单引号”和反引号以及things" with inline double "quotes。 -
不,不是 Perl。 RegEx 在 ASP.NET Core API 中执行。
-
ASP.NET Core API 肯定具有解析命令行选项的功能,不是吗?毫无疑问,无论您使用哪种语言,这都是一个已解决的问题。
标签: regex