为什么 C# 中的 \d 比 [0-9] 慢,以及如何修复?
大家好!我正在用 C# 编写一个使用正则表达式的日志解析器。我注意到一个奇怪的行为:当我使用 \d 查找数字时,性能比使用 [0-9] 慢了几倍。
以下是我测试的示例代码:
```csharp
using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = string.Concat(Enumerable.Repeat("1234567890", 100000));
var sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
Regex.Match(input, @"\d+");
}
sw.Stop();
Console.WriteLine($"\\d: {sw.ElapsedMilliseconds} ms");
sw.Restart();
for (int i = 0; i < 1000; i++)
{
Regex.Match(input, @"[0-9]+");
}
sw.Stop();
Console.WriteLine($"[0-9]: {sw.ElapsedMilliseconds} ms");
}
}
```
结果让我惊讶:\d 运行