【问题标题】:Optional regex character group可选的正则表达式字符组
【发布时间】:2013-12-27 00:05:02
【问题描述】:

我正在尝试编写一个正则表达式来验证一些命令行参数,我已经让它工作了,但它似乎效率不高,而且我想看看是否有一种方法可以对参数进行分组在一起。

命令行有3个可选参数-h -s -r,可能都用,也可能根本不用。

我现在的正则表达式是

myapp.exe\s?(-h\s*)?\s?(-s\s*)\s?(-r\s*)?

我是否必须为每个参数重复\s?(-x\s*),还是可以将它们组合在一起?像\s?(-h,-r,-s\s*) 这样的东西会很有帮助!

谢谢

【问题讨论】:

  • 是否可以重复相同的参数?例如。 myapp.exe -h -h
  • @Jerry 不,它们只能使用一次,但顺序不限。
  • 我认为这样做的唯一方法是通常像 Windows 那样解析命令行,然后检查参数的有效性。有关详细信息,请参阅此答案:Args

标签: c# regex


【解决方案1】:

你可以使用类似的东西:

myapp\.exe\s?(-[hsr]\s*)*

如果您希望正则表达式匹配文字点,请不要忘记转义点。

[ ... ] 是一个字符类,将匹配其中的任何一个(或范围,如果你定义了任何)字符。

regex101 demo


编辑:为确保标志不重复,您可以使用反向引用和负前瞻,以及行尾锚:

myapp\.exe\s?(?:-([hsr])(?!.*\1)\s*)*$

\1 将引用 ([hsr]) 中捕获的任何内容

(?! ... ) 将否定匹配,如果里面有任何匹配

$ 将确保检查整个字符串。如果您在问题中提供的字符串后面还有其他内容以使其正确匹配,您可能需要删除该部分。

【讨论】:

  • 太棒了,我知道这会很简单,谢谢 Jerry。
  • 我会在 6 分钟内接受 :) 但我如何确保它们每个只使用一次?
  • @BaliC 对不起,我想吃饭。你可以稍微修改一下(它有点复杂),你会得到this
  • 哦,哇,我会很开心地剖析它!感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2010-11-04
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多