[Mono-list] Regular expression question

Carlos Guzmán Álvarez carlosga@telefonica.net
Sat, 12 Jun 2004 16:19:50 +0200


This is a multi-part message in MIME format.
--------------020605060904010805090703
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Hello:

Atatched is a sample test case using regular expressions
that fails in mono (Fedora Core 1) but works fine in .NET.

The problem seems to be in the:

return Regex.Replace(input, g.Value, "$1");

it can be fixed using:

return Regex.Replace(input, g.Value, "$$1");


But as the code works fine in .NET using a single $ i want to
know if it's a mono problem or the double $$ is tyhe correct syntax ??


( For now i will fix my code it using $$ :) )



--
Best regards

Carlos Guzmán Álvarez
Vigo-Spain



--------------020605060904010805090703
Content-Type: text/plain;
 name="RegExTest.cs"
Content-Transfer-Encoding: 8bit
Content-Disposition: inline;
 filename="RegExTest.cs"

using System;
using System.Text.RegularExpressions;

namespace RegexTest
{	
	public class Test 
	{
		[STAThread]
		public static void Main(string[] args)
		{
			string sql = "insert into public.test_table values(@int4_field, @char_field, @varchar_field, @single_field, @double_field, @date_Field, @time_field, @timestamp_field, @blob_field)";

			string pattern = @"(('[^']*?\@[^']*')*[^'@]*?)*(?<param>@\w+)*([^'@]*?('[^']*?\@*[^']*'))*";

			Regex r = new Regex(pattern, RegexOptions.ExplicitCapture|RegexOptions.Multiline);

			MatchEvaluator me = new MatchEvaluator(matchEvaluator);

			sql = r.Replace(sql, me);

			Console.WriteLine(sql);
		}

		public static string matchEvaluator(Match match)
		{
			string input	= match.Value;
			string replace	= String.Empty;

			if (match.Groups["param"].Success)
			{
				Group g = match.Groups["param"];
												
				return Regex.Replace(input, g.Value, "$$1");
			}
			else
			{
				return match.Value;
			}
		}
	}
}

--------------020605060904010805090703--