繁体   English   中英

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

[英]C# Regex command-line argument parsing with single hyphen word wrapping inside argument names

我正在为.NET开发一个开放源代码/自由命令行解析器,这将是限制性的但很明确。 起初这似乎是一件容易的事,但由于正则表达式问题被困了两天,并不是那么有趣。 :(

我已经阅读了数小时的有关单词匹配和分组的教程,但是它并没有按我期望的那样工作。 当某些事情突然起作用,而我试图向该模式添加新功能时,有时一切都会以失败告终。

因此,基本上我想构建四种不同的正则表达式模式,并将它们用于多种用途:

  • 解析在控制台中键入的用户参数列表
  • 检查程序员定义的参数名称是否符合条件

每种匹配模式都允许一个特定类别的参数,如下所述:

1.单个连字符前缀的选项

单个连字符后必须跟单个小写/大写字母数字或多个分组。

例如,有效格式:

-A
-g
-1
-Ag1

后者与前三个选项组合在一起。 以下模式适用于单个字母, 但不幸的是,使用单个连字符换行可以从其他参数中提取片段

-{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中所述的规则相同,只是不需要双连字符前缀。

在前两个问题解决之前,我无法提出对后两个问题有用的任何东西。

顺便说一句,我使用的是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"

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

非常感谢您的提前帮助。

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

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

DEMO

要么

使用环顾四周。

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

(?<!\\S)否定性向后看,它断言匹配将不会以非空格字符开头。

DEMO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM