正则表达式与包含4个组的字符串不匹配

时间:2014-10-16 09:00:43

标签: c# regex

我想匹配一个字符串,我将其划分为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。

我的模式有什么问题?

2 个答案:

答案 0 :(得分:5)

此处的错误是.*不应括在括号中。

此:

[.*]

意思是:

  • 或asterix

此:

.*

意思是:

  • 任何字符,零次或多次

此外,如果某个地方只有一个合法字符,您通常不需要将其括在括号中。

所以请尝试使用此表达式:

new Regex("^-.*:.*$");

答案 1 :(得分:0)

你误解了character class的概念。字符类只是没有任何顺序的字符集合。因此,当您编写类似[.*]的内容时,这意味着文字点是文字星号。

一个重要的精度,所有正则表达式特殊字符都松散了它们的含义,并被视为字符类中的文字字符。但是,某些字符在第一个字符类({1}}(取消一个类)或^来定义范围时可能在字符类中具有特殊含义。某些语法也可以在字符类中使用,例如shorthandPOSIX character classescharacter classes substractions

你可以在没有所有这些(无用的)角色类的情况下编写整个模式:

-

但是,为了提高效率,可以在分号前使用否定字符类:

^-.*:.*$