C#Regex命令行参数解析,在参数名称中包含单个连字符

时间:2015-03-07 18:44:18

标签: c# regex parsing command-line-arguments

我正在为.NET开发一个开源/ libre命令行解析器,它将是限制性但很明确。起初这似乎是一项简单的任务,但是在2天内遇到了正则表达式问题,而不是那么有趣。 :(

我一直在阅读关于单词匹配和分组的几个小时的教程,但它并没有像我期望的那样工作。当某些东西突然出现并且我正在尝试为该模式添加新功能时,有时候一切都失败了。

所以基本上我想构建四种不同的正则表达式模式,它们可以用于多种用途:

  • 解析在控制台中键入的用户参数列表
  • 检查程序员定义的参数名称是否匹配 标准

每个匹配模式将允许下面描述的一个特定类别的参数:

1。单连字符前缀选项

单个连字符后面必须跟一个小写/大写字母数字或多个开关可以分组。

例如,有效格式:

-A
-g
-1
-Ag1

后者等同于组合在一起的前3个选项。以下模式适用于单个字母但不幸的是,使用单个连字符自动换行来从其他参数中拾取片段

-{1}\b[A-Za-z0-9]{1}\b

2。双连字符前缀选项

双连字符必须后跟至少一个小写字母,后面必须跟有多个小写字母数字,单词可以用单个连字符包裹。

例如,有效格式:

--valid
--th1s-is-also-val1d
--match-this-option-as-well

格式无效:

--9this-is-invalid-because-of-the-leading-digit
--this--is--invalid--because--of--word--wrapping--by--multiple--hyphens
--this-should-also-fail-because-of-the-trailing-hyphen-

这是我为此任务提供的最新损坏模式。它们也匹配一些无效的:

-{2}\b[a-z][a-z0-9-]{2,}\b
-{2}\b[a-z][a-z\d]{2,}\b(-{1}[a-z\d]+)*

3。值

必须遵循双连字符选项,并在它们之间使用等式符号。只有数字值才能省略双引号。

4。内部命令

必须以小写字母开头,后面必须跟多个小写字母数字,单词可以用单个连字符包裹。基本上相同的规则适用于#2中描述的,但不需要双连字符前缀。

在前两个问题得到解决之前,我无法为最后两个问题找到任何有用的东西。

BTW我正在使用Monodevelop的内置Regex工具包,该工具包使用Mono库。这可能也是个问题吗?

这是我的测试输入,其中包含以上所有示例:

-A -g -1 -Ag1 --valid --th1s-is-also-val1d --match-this-option-as-well --9this-is-invalid-because-of-the-leading-digit --this--is--invalid--because--of--word--wrapping--by--multiple--hyphens --this-should-also-fail-because-of-the-trailing-hyphen- --load-file="ReAdMe2.TxT"

有人可以检查我的部分工作模式他们有什么问题吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您只需要在第二个正则表达式中添加开始和结束锚点。

^-{2}\b[a-z][a-z\d]{2,}\b(-[a-z\d]+)*$

DEMO

使用lookarounds。

(?<!\S)-{2}\b[a-z][a-z\d]{2,}\b(-{1}[a-z\d]+)*(?!\S)

(?<!\S)负面的背后隐藏,声称匹配不会以非空格字符开头。

DEMO