A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Quan Mai
Aug 22, 2025
  732
(1 votes)

Don't let Regex slow you down

There is a joke with programmers/developers: you have one problem, you use regex, now you have two problems!

Perl Problems : r/xkcd

It's funny because it true! But kidding aside, let's all agree that Regex is incredibly powerful and helpful. But let's also agree that Regex can be expensive to run. We are told to cache the regex with RegexOptions.Compiled.

But is that a good enough practice? Or even "good"?

Today I stumped upon a bug fix I made 5 years ago. The context of bug fix was lost with time, so I think it could be interesting to see how much improvement it made. The fix moved a new Regex from instance to be static, so I asked CoPilot to write a test to compare between the three approaches 

  • Create a new Regex every time
  • Create a new Regex every time but with RegexOptions.Compiled
  • Create a new Regex once and cached with a static propery

And CoPilot created this bug free, error-free code. Scarily it even suggests to use Lazy<T> to delay the creation of Regex until necessarily. 

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text.RegularExpressions;

[MemoryDiagnoser] // Enables memory allocation tracking
public class RegexBenchmark
{
    private const string Input = "https://example.com/assets/image.png";
    private const string Pattern = @"^https:\/\/example\.com\/assets\/.*$";

    private static readonly Regex StaticRegex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);

    [Benchmark]
    public bool NewRegex_Interpreted()
    {
        var regex = new Regex(Pattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(Input);
    }

    [Benchmark]
    public bool NewRegex_Compiled()
    {
        var regex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
        return regex.IsMatch(Input);
    }

    [Benchmark]
    public bool StaticRegex_Compiled()
    {
        return StaticRegex.IsMatch(Input);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        BenchmarkRunner.Run<RegexBenchmark>();
    }
}

And the test result was a surprise to me

I knew StaticRegex should be the best, but I was surprised to learn that even with caching and lookup, the Compiled regex is not only the slowest by a large margin, but also every expensive in term of allocations. It's a no no, especially in cases of hot paths! For inexperienced developers who think Compiled will solve the problem, it is, actually, creating a problem!

Do yourself a favor and look for all usages of new Regex in your code base. If it's not already a static property, time to be a hero and fix it! An alternative is to use Regex.IsMatch with Compiled option - so not creating an instance. It is slightly slower than Static Regex instance, but not by much and could be within the margin of error.

And if you have time to spare, take a look at .NET regular expression source generators - .NET | Microsoft Learn for even faster regex creations.

 

Aug 22, 2025

Comments

Deepak Dubey
Deepak Dubey Sep 12, 2025 07:28 AM

Nice and informative post for the developer life who deals with such scenarios.

 

Please login to comment.
Latest blogs
A day in the life of an Optimizely OMVP: Learning Optimizely Just Got Easier: Introducing the Optimizely Learning Centre

On the back of my last post about the Opti Graph Learning Centre, I am now happy to announce a revamped interactive learning platform that makes...

Graham Carr | Jan 31, 2026

Scheduled job for deleting content types and all related content

In my previous blog post which was about getting an overview of your sites content https://world.optimizely.com/blogs/Per-Nergard/Dates/2026/1/sche...

Per Nergård (MVP) | Jan 30, 2026

Working With Applications in Optimizely CMS 13

💡 Note:  The following content has been written based on Optimizely CMS 13 Preview 2 and may not accurately reflect the final release version. As...

Mark Stott | Jan 30, 2026

Experimentation at Speed Using Optimizely Opal and Web Experimentation

If you are working in experimentation, you will know that speed matters. The quicker you can go from idea to implementation, the faster you can...

Minesh Shah (Netcel) | Jan 30, 2026