Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
Why does checking this string with Regex.IsMatch cause CPU to reach 100%?

When using Regex.IsMatch (C#, .Net 4.5) on a specific string, the CPU reaches 100%.

String:

https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/?type=1&permPage=1

Pattern:

^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$

Full code:

Regex.IsMatch("https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/?type=1&permPage=1",
                @"^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$");

I found that redacting the URL prevents this problem. Redacted URL:

https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792

But still very interested in understanding what causes this.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

As nu11p01n73R pointed out, you have a lot backtracking with your regular expression. That’s because parts of your expression can all match the same thing, which gives the engine many choices it has to try before finding a result.

You can avoid this by changing the regular expression to make individual sections more specific. In your case, the cause is that you wanted to match a real dot but used the match-all character . instead. You should escape that to \..

This should already reduce the backtracking need a lot and make it fast:

^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=])?$

And if you want to actually match the original string, you need to add a quantifier to the character class at the end:

^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]+)?$
                                           ↑
over 4 years ago · Santiago Trujillo Denunciar

0

I suggest you to check http://regexr.com/ website, to test your regular expression.

The corrected version of your regular expression is this:

^(https?://(?:[\w]+\.?[\w]+)+[\w]/?)([\w\./]+)(\?[\w-=&%]+)?$

It also has 3 groups:

  1. group1=Main url (for example: facebook.com)
  2. group2=Sub urls (for example: /CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/
  3. group3=Variables (for example: ?type=1&permPage=1)

Also remember for checking actual character of dot (.) in your regular expression you must use \. not .

over 4 years ago · Santiago Trujillo Denunciar

0

Your regex suffers for catastrophic backtracking.You can simply use

^http(s)?://([\w.-])+(/[\w ./?%&=-]+)*$

See demo.

https://regex101.com/r/cK4iV0/15

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda