When using Regex.IsMatch
(C#, .Net 4.5) on a specific string, the CPU reaches 100%.
String:
https://www.facebook.com/CashKingPirates/ph
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:
Also remember for checking actual character of dot (.) in your regular expression you must use \. not .
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- ./?%&=]+)?$
↑
Your regex suffers for catastrophic backtracking
.You can simply use
^http(s)?://([\w.-])+(/[\w ./?%&=-]+)*$
See demo.
https://regex101.com/r/cK4iV0/15