我目前正在考虑实现某种命令管理系统,没有什么大的,只是为了好玩的目的(例如,IRC Bot,......)
我在C#中做得很好,并且所有逻辑都或多或少地设置了,但由于我是RegEx方面的菜鸟,我找不到解析所有参数和标识符的好方法。我确实想象过像“parameter parameter1'parameter2 with space'parameter3”。这是我的“概念”,在我看来,使用字符串方法“拆分,替换,子串,......”并不是一个好的解决方案,但RegEx可以完成这项工作。
所以,长话短说:RegEx甚至可以实现这一点吗?如何使用RegEx正确解析?在如何处理参数方面是否有更好的解决方案?
我想为每个命令创建一个“模式”,然后让解析器收集所有字符串。在这种情况下,用户不需要使用“”来指定参数,但我认为RegEx将是更好的解决方案......
那就是它,希望得到帮助:)
答案 0 :(得分: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();