using System;
using System.Collections .Generic ;
using System.Text .RegularExpressions ;
using System.Linq ;
public class Test
{
public static void Main( )
{
var rxRTL = new Regex( @"[0-9]{4}" , RegexOptions.Compiled | RegexOptions.RightToLeft ) ;
var rxLTR = new Regex( @"^.*([0-9]{4})" , RegexOptions.Compiled ) ;
var rxRLTR = new Regex( @"^.*([0-9]{4})" , RegexOptions.Compiled | RegexOptions.RightToLeft ) ;
var phrase = "Chocolatechipcookie2017!" ;
Match m = null ;
var stopwatch = new System.Diagnostics .Stopwatch ( ) ;
stopwatch.Start ( ) ;
for ( int i= 0 ; i< 50000 ; i++ ) {
m = rxRTL.Match ( phrase) ;
}
stopwatch.Stop ( ) ;
Console.WriteLine ( "[0-9]{{4}} with RTL: Time spent: {0}; Match = {1}" , stopwatch.Elapsed .TotalSeconds , m.Value ) ;
var stopwatch1 = new System.Diagnostics .Stopwatch ( ) ;
stopwatch1.Start ( ) ;
for ( int i= 0 ; i< 50000 ; i++ ) {
m= rxLTR.Match ( phrase) ;
}
stopwatch1.Stop ( ) ;
Console.WriteLine ( "^.*([0-9]{{4}}) no RTL modifier: Time spent: {0}; Match = {1}" , stopwatch1.Elapsed .TotalSeconds , m.Groups [ 1 ] .Value ) ;
var stopwatch2 = new System.Diagnostics .Stopwatch ( ) ;
stopwatch2.Start ( ) ;
for ( int i= 0 ; i< 50000 ; i++ ) {
m= rxRLTR.Match ( phrase) ;
}
stopwatch2.Stop ( ) ;
Console.WriteLine ( "^.*([0-9]{{4}}) with RTL modifier: Time spent: {0}; Match = {1}" , stopwatch2.Elapsed .TotalSeconds , m.Groups [ 1 ] .Value ) ;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwp1c2luZyBTeXN0ZW0uTGlucTsKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciByeFJUTCA9IG5ldyBSZWdleChAIlswLTldezR9IiwgUmVnZXhPcHRpb25zLkNvbXBpbGVkIHwgUmVnZXhPcHRpb25zLlJpZ2h0VG9MZWZ0KTsKCQl2YXIgcnhMVFIgPSBuZXcgUmVnZXgoQCJeLiooWzAtOV17NH0pIiwgUmVnZXhPcHRpb25zLkNvbXBpbGVkKTsKCQl2YXIgcnhSTFRSID0gbmV3IFJlZ2V4KEAiXi4qKFswLTldezR9KSIsIFJlZ2V4T3B0aW9ucy5Db21waWxlZCB8IFJlZ2V4T3B0aW9ucy5SaWdodFRvTGVmdCk7CgkJdmFyIHBocmFzZSA9ICJDaG9jb2xhdGVjaGlwY29va2llMjAxNyEiOwoJCU1hdGNoIG0gPSBudWxsOwoJCQoJCXZhciBzdG9wd2F0Y2ggPSBuZXcgU3lzdGVtLkRpYWdub3N0aWNzLlN0b3B3YXRjaCgpOwoJCXN0b3B3YXRjaC5TdGFydCgpOwoJCWZvciAoaW50IGk9MDsgaTw1MDAwMDsgaSsrKSB7CgkJCW0gPSByeFJUTC5NYXRjaChwaHJhc2UpOwoJCX0KCQlzdG9wd2F0Y2guU3RvcCgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJbMC05XXt7NH19IHdpdGggUlRMOiBUaW1lIHNwZW50OiB7MH07IE1hdGNoID0gezF9Iiwgc3RvcHdhdGNoLkVsYXBzZWQuVG90YWxTZWNvbmRzLCBtLlZhbHVlKTsKCQkKCQl2YXIgc3RvcHdhdGNoMSA9IG5ldyBTeXN0ZW0uRGlhZ25vc3RpY3MuU3RvcHdhdGNoKCk7CgkJc3RvcHdhdGNoMS5TdGFydCgpOwoJCWZvciAoaW50IGk9MDsgaTw1MDAwMDsgaSsrKSB7CgkJCW09cnhMVFIuTWF0Y2gocGhyYXNlKTsKCQl9CgkJc3RvcHdhdGNoMS5TdG9wKCk7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIl4uKihbMC05XXt7NH19KSBubyBSVEwgbW9kaWZpZXI6IFRpbWUgc3BlbnQ6IHswfTsgTWF0Y2ggPSB7MX0iLCBzdG9wd2F0Y2gxLkVsYXBzZWQuVG90YWxTZWNvbmRzLCBtLkdyb3Vwc1sxXS5WYWx1ZSk7CgkJCgkJdmFyIHN0b3B3YXRjaDIgPSBuZXcgU3lzdGVtLkRpYWdub3N0aWNzLlN0b3B3YXRjaCgpOwoJCXN0b3B3YXRjaDIuU3RhcnQoKTsKCQlmb3IgKGludCBpPTA7IGk8NTAwMDA7IGkrKykgewoJCQltPXJ4UkxUUi5NYXRjaChwaHJhc2UpOwoJCX0KCQlzdG9wd2F0Y2gyLlN0b3AoKTsKCQlDb25zb2xlLldyaXRlTGluZSgiXi4qKFswLTlde3s0fX0pIHdpdGggUlRMIG1vZGlmaWVyOiBUaW1lIHNwZW50OiB7MH07IE1hdGNoID0gezF9Iiwgc3RvcHdhdGNoMi5FbGFwc2VkLlRvdGFsU2Vjb25kcywgbS5Hcm91cHNbMV0uVmFsdWUpOwoJfQp9