我正在尝试编写一个正则表达式来验证一些命令行参数,我已经让它工作了但它看起来效率不高,而且随后会有更多我希望看看是否有一种方法可以对参数进行分组在一起。
命令行有3个可选参数-h -s -r
,它们可能都被使用,它们可能根本不被使用。
我现在的正则表达式是
myapp.exe\s?(-h\s*)?\s?(-s\s*)\s?(-r\s*)?
我是否必须为每个参数重复\s?(-x\s*)
,还是可以将它们组合在一起?像\s?(-h,-r,-s\s*)
之类的东西会非常有用!
由于
答案 0 :(得分:2)
你可以使用类似的东西:
myapp\.exe\s?(-[hsr]\s*)*
如果您希望正则表达式与文字点匹配,请不要忘记转义点。
[ ... ]
是一个字符类,它将匹配任何一个(或者如果你定义任何一个范围)字符。
编辑:为了确保标记不重复,您可以使用反向引用和否定前瞻以及行结束锚点:
myapp\.exe\s?(?:-([hsr])(?!.*\1)\s*)*$
\1
将引用([hsr])
(?! ... )
将否定匹配
$
将确保检查整个字符串。如果您在问题中提供的字符串之后还有其他内容可以使其正确匹配,则可能需要删除该部分。