1

我目前正在考虑实现某种命令管理系统,没什么大不了的,只是为了好玩(例如 IRC Bot,...)

我在 C# 中做得很好,所有的逻辑都或多或少地设置好了,但由于我是 RegEx 方面的菜鸟,我找不到解析所有参数和标识符的好解决方案。我确实想象过类似“标识符parameter1'parameter2 with space'parameter3”之类的东西。那是我的“概念”,在我看来,仅使用字符串方法“拆分、替换、子字符串...”并不是一个好的解决方案,但 RegEx 可以完成这项工作。

所以,长话短说:RegEx 甚至可以做到这一点吗?如何使用 RegEx 正确解析?在如何处理论点方面有更好的解决方案吗?

我想为每个命令创建一个“模式”,然后让解析器收集所有字符串。在这种情况下,用户不需要使用“”来指定参数,但我认为 RegEx 会是更好的解决方案......

差不多就是这样,希望得到帮助:)

4

1 回答 1

0

看看这个正则表达式是否对您有帮助:

var matches = Regex.Matches(inputStr, @"'[^']*'|\S+");

如果您使用输入运行它:“identifier parameter1 'parameter2 with space' parameter3”,那么您将获得一个包含 4 个元素的集合:

identifier
parameter1
'parameter2 with space'
parameter3

编辑

我制作了一个改进的版本: - 支持''作为转义'符,当在带有空格的参数内时

var matches =
    Regex.Matches("identifier parameter1 'parameter2 with ''space''' parameter3",
        @"'(?:[^']|'')*'|\S+")
        .Cast<Match>()
        .Select(m => m.Value)
        .Select(s => s.StartsWith("'") && s.Length >= 2 ?
            s.Substring(1, s.Length - 2).Replace("''", "'") : s)
        .ToArray();
于 2013-07-03T22:15:01.020 回答