我想匹配一个字符串,我将其划分为4组:
1.) group has a "-"
2.) group has any char
3.) group has a ":"
4.) group has any char
我试过这个:
Regex regex = new Regex("^[-][.*][:][.*]*$");
bool isMatch = regex.IsMatch("-jobid:3");
isMatch为false。
我的模式有什么问题?
答案 0 :(得分:5)
此处的错误是.*
不应括在括号中。
此:
[.*]
意思是:
此:
.*
意思是:
此外,如果某个地方只有一个合法字符,您通常不需要将其括在括号中。
所以请尝试使用此表达式:
new Regex("^-.*:.*$");
答案 1 :(得分:0)
你误解了character class的概念。字符类只是没有任何顺序的字符集合。因此,当您编写类似[.*]
的内容时,这意味着文字点或是文字星号。
一个重要的精度,所有正则表达式特殊字符都松散了它们的含义,并被视为字符类中的文字字符。但是,某些字符在第一个字符类({1}}(取消一个类)或^
来定义范围时可能在字符类中具有特殊含义。某些语法也可以在字符类中使用,例如shorthand或POSIX character classes和character classes substractions。
你可以在没有所有这些(无用的)角色类的情况下编写整个模式:
-
但是,为了提高效率,可以在分号前使用否定字符类:
^-.*:.*$