我需要使用与此
类似的格式验证一些命令"/a foo.bar /b bar.foo /c 01(.01)"
其中final(.01)是可选的(括号用于将内容标记为可选)。可以设置任何数字而不是0和1。开关/ a,/ b,/ c也是固定的 目前,我已经开发了这个正则表达式:
@"/a\s*([\w\W]*)\s*/b\s*([\w\W]*)\s*/c\s*[0-9,0-9,(.,0-9,0-9){0,1}]
但由于某种原因,如果命令是例如
"/a foo.bar /b bar.foo /c 01.",
它仍然可以对正则表达式进行验证。有效命令应以2digits.2digits或简单的2digits结束。
有人可以帮我解决这个问题吗?
干杯,
Alex Barac
答案 0 :(得分:2)
答案 1 :(得分:0)
你误解了角色类。例如,这个:
[0-9,0-9,(.,0-9,0-9){0,1}]
和此:
[0-9,.(){}]
意思是同样的事情。换句话说,无论你放在方括号内,该表达式都匹配单个字符,除非你量化字符类。相反,你想要的是:
@"/a\s*([\w\W]*)\s*/b\s*([\w\W]*)\s*/c\s*[0-9][0-9](\(\.[0-9][0-9])){0,1}"
但是,让我帮助您进一步简化和解决这个问题:
.
(通配符)而非[\w\W]
(除非您专门用于匹配换行符,否则默认情况下.
不匹配新行)。.
你实际上是指一个点,接近结尾的原因。\d
是[0-9]
。{0,1}
量词。?
是{0,1}
。考虑到所有这些:
@"/a\s*(.*)\s*/b\s*(.*)\s*/c\s*\d\d(\(\.\d\d))?"
最后两件事。首先,如果参数之间至少应有一个空格,则应使用\s+
而不是\s*
。其次,如果您想允许超过两位数,那么您可以\d+
代替\d\d
。