这段代码
Regex regex = new Regex("blah", RegexOptions.Singleline & RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
编译后在ILSpy中看起来像这样:
Regex regex = new Regex("blah", RegexOptions.None);
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,并且它是正则表达式在.Net 3.5中不匹配的原因吗?在4.5它工作.
xle*_*ier 14
RegexOptions.Singleline & RegexOptions.IgnoreCase
Run Code Online (Sandbox Code Playgroud)
是按位AND,并解析为0(即RegexOptions.None).
该RegexOptions枚举看起来是这样的:
[Flags]
public enum RegexOptions
{
None = 0,
IgnoreCase = 1,
Multiline = 2,
ExplicitCapture = 4,
Compiled = 8,
Singleline = 16,
IgnorePatternWhitespace = 32,
RightToLeft = 64,
ECMAScript = 256,
CultureInvariant = 512,
}
Run Code Online (Sandbox Code Playgroud)
所以,在二进制中,我们有:
RegexOptions.SingleLine == 10000
RegexOptions.IngoreCase == 00001
Run Code Online (Sandbox Code Playgroud)
当应用按位AND时,我们得到:
10000
AND 00001
-----
00000
Run Code Online (Sandbox Code Playgroud)
用...来代替
RegexOptions.Singleline | RegexOptions.IgnoreCase
Run Code Online (Sandbox Code Playgroud)
这使:
10000
OR 00001
-----
10001
Run Code Online (Sandbox Code Playgroud)
ILSpy将反编译:
Regex regex = new Regex("blah", RegexOptions.Singleline | RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
但我不知道.Net 4.5中的"有效".我刚编译了你的代码,ILSpy也输出:
Regex regex = new Regex("blah", RegexOptions.None);
Run Code Online (Sandbox Code Playgroud)
如预期.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |