Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

regex greedy problem (C#)

I've a input string like "===text=== and ===text===" and I want to replace wiki syntax with the corresponding html tag.

input:

===text=== and ===text===

desirable output:

<h1>text</h2> and <h1>text</h2>

but with the following code I get this output:

var regex = new Regex("---(.+)---");
var output = regex.Replace("===text=== and ===text===", "<h1>$1</h1>");

<h1>text=== and ===text</h1>

I know the problem is that my regex matches greedy. But how to make them non greedy.

Thank you and kind regards. Danny

like image 944
dannyyy Avatar asked Mar 11 '11 16:03

dannyyy


2 Answers

Add the question mark to your regex: ===(.+?)===

A better alternative would be to have a regex of the following form: ===([^\=]+)===. See this guide on the dot character for an explanation of using the dot sparingly. When benchmarking my supplied regex, it is approx. 50% faster than your regex.

like image 52
WiseGuyEh Avatar answered Oct 25 '22 02:10

WiseGuyEh


To make a Regex not greedy you use ?

So the expression "===(.+?)===" would have two matches for you - so should allow you to generate <h1>text</h1> and <h1>text</h1>

like image 44
Stuart Avatar answered Oct 25 '22 01:10

Stuart