C# Regex 命令行参数解析,在参数名称中使用单个连字符换行
C# Regex command-line argument parsing with single hyphen word wrapping inside argument names
我正在为 .NET 开发一个 opensource/libre 命令行解析器,它有限制但很清楚。一开始这似乎是一件容易的事,但 2 天以来一直被正则表达式问题所困,并不是那么有趣。 :(
我已经阅读了数小时的有关单词匹配和分组的教程,但它并不像我预期的那样有效。当某些东西突然起作用并且我正在尝试向模式添加新功能时,有时以前起作用的一切都会失败。
所以基本上我想构建四种不同的正则表达式模式,它们将用于多种用途:
- 正在解析在控制台中键入的用户参数列表
- 检查程序员定义的参数名称是否匹配
标准
每个匹配模式都允许一个特定的 class 参数,如下所述:
1。单连字符前缀选项
单个连字符后必须跟一个 lower/upper 大小写字母数字或多个开关可以组合在一起。
例如,有效格式:
-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"
有人可以检查我的部分工作模式有什么问题吗?
非常感谢您的提前帮助。
我正在为 .NET 开发一个 opensource/libre 命令行解析器,它有限制但很清楚。一开始这似乎是一件容易的事,但 2 天以来一直被正则表达式问题所困,并不是那么有趣。 :(
我已经阅读了数小时的有关单词匹配和分组的教程,但它并不像我预期的那样有效。当某些东西突然起作用并且我正在尝试向模式添加新功能时,有时以前起作用的一切都会失败。
所以基本上我想构建四种不同的正则表达式模式,它们将用于多种用途:
- 正在解析在控制台中键入的用户参数列表
- 检查程序员定义的参数名称是否匹配 标准
每个匹配模式都允许一个特定的 class 参数,如下所述:
1。单连字符前缀选项
单个连字符后必须跟一个 lower/upper 大小写字母数字或多个开关可以组合在一起。
例如,有效格式:
-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"
有人可以检查我的部分工作模式有什么问题吗?
非常感谢您的提前帮助。