Regex与包含4个组的字符串不匹配

本文关键字:字符串 不匹配 4个 包含 Regex | 更新日期: 2023-09-27 18:26:53

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

我的模式出了什么问题?

Regex与包含4个组的字符串不匹配

这里的错误是.*不应该包含在括号中。

此:

[.*]

意思是:

  • 或星号

此:

.*

意思是:

  • 任何字符,零次或多次

此外,如果一个点中只有一个法律字符,通常不需要将其括在括号中。

所以试试这个表达式:

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

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

一个重要的精度是,所有regex特殊字符都失去了它们的含义,并被视为字符类中的文字字符。然而,在字符类中,一些字符可能具有特殊含义,如第一位的^(否定类)或定义范围的-。有些语法也可以在字符类中使用,如简写或POSIX字符类,以及字符类子动作。

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

^-.*:.*$

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

^-[^:]*:.*$