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。
我的模式出了什么问题?
这里的错误是.*
不应该包含在括号中。
此:
[.*]
意思是:
- 点
- 或星号
此:
.*
意思是:
- 任何字符,零次或多次
此外,如果一个点中只有一个法律字符,通常不需要将其括在括号中。
所以试试这个表达式:
new Regex("^-.*:.*$");
您误解了字符类的概念。字符类只是一个没有任何顺序的字符集合。因此,当您编写类似[.*]
的内容时,这意味着文字点或文字星号。
一个重要的精度是,所有regex特殊字符都失去了它们的含义,并被视为字符类中的文字字符。然而,在字符类中,一些字符可能具有特殊含义,如第一位的^
(否定类)或定义范围的-
。有些语法也可以在字符类中使用,如简写或POSIX字符类,以及字符类子动作。
你可以在没有所有这些(无用的)字符类的情况下编写整个模式:
^-.*:.*$
但是,为了更高效,可以在分号前使用否定字符类:
^-[^:]*:.*$