这是最常用的正则表达式函数之一
Regex.IsMatch("Test text for regex test.", "(test)",
RegexOptions.IgnoreCase | RegexOptions.Multiline);
你能解释一下 Regex.IsMatch 方法是如何工作的吗?我的意思是它如何处理按位 OR RegexOptions 参数?它如何定义方法参数?
感谢您的回复!
这是最常用的正则表达式函数之一
Regex.IsMatch("Test text for regex test.", "(test)",
RegexOptions.IgnoreCase | RegexOptions.Multiline);
你能解释一下 Regex.IsMatch 方法是如何工作的吗?我的意思是它如何处理按位 OR RegexOptions 参数?它如何定义方法参数?
感谢您的回复!
RegexOptions
[Flags]
是一个应用了属性的枚举。这允许将按位运算应用于各种值。
你也可以做类似的事情:
[Flags]
enum MyOptions {
UpperCase = 1,
Reverse = 2,
Trim = 4
}
public static void DoTransform(MyOptions options) {
if ((options & MyOptions.UpperCase) == MyOptions.UpperCase) {
/* Do Upper case transform */
}
if ((options & MyOptions.Reverse) == MyOptions.Reverse) {
/* Do Reverse transform */
}
/* etc, ... */
}
DoTransform(MyOptions.UpperCase | MyOptions.Reverse);
我刚刚根据弗兰克的评论做了更多的挖掘,他是正确的,无论有没有[Flags]
属性,上面的代码都会编译和运行。
关于[Flags]
属性没有做什么,还有其他评论,但除了“它影响ToString()
结果”之外,似乎没有人知道或想要解释它的作用。在我编写的代码中,我修饰了打算用作[Flags]
属性位域的枚举,因此在这种情况下,它至少在某种程度上是自记录的。不然我就亏大了。
RegexOptions 是一个枚举,这意味着在内部,它表示为一个整数。它的值看起来像这样:
// note the powers of 2
enum RegexOptions {
IgnoreCase = 1, MultiLine = 2,
SomeOtherOption = 4, YetAnotherThing = 8 }
这些值的设计使得如果你用二进制表示它们,每个值都有一个位。
因此,如果您对两个值进行按位或运算并得到结果,您可以通过评估 (result AND IgnoreCase) 来确定是否设置了其中一个值(例如 IgnoreCase)。