using System;using System.Diagnostics;
public static class Extensions
public static string GetFirstStringBetweenStringsMinSpanCleanup(this string s, string from, string to)
if (string.IsNullOrEmpty(s) || string.IsNullOrEmpty(from) || string.IsNullOrEmpty(to)) return string.Empty;
int idxFrom = s.IndexOf(from);
int idxStart = idxFrom + from.Length;
if (idxFrom == -1 || idxStart >= s.Length - 1)
int idxEnd = s.IndexOf(to, idxStart);
if (idxEnd == -1 || idxEnd <= idxStart)
return s.Substring(idxStart, idxEnd - idxStart);
public static string GetFirstStringBetweenStringsMinSpan(this string s, string from, string to)
Console.Write("args from {0} to {1} = ", from, to);
if (string.IsNullOrEmpty(s) || string.IsNullOrEmpty(from) || string.IsNullOrEmpty(to)) return string.Empty;
int idxFrom = s.IndexOf(from);
int idxStart = idxFrom + from.Length;
else if (idxStart >= s.Length - 1)
Console.WriteLine("r1. idxStart={0} >= (s.Length - 1)={1}", idxStart, s.Length - 1);
int idxEnd = s.IndexOf(to, idxStart);
else if (idxEnd > s.Length - 1)
Console.WriteLine("r2. idxEnd={0} > (s.Length - 1)={1}", idxEnd, s.Length - 1);
else if (idxEnd <= idxStart)
Console.WriteLine("r3. idxEnd={0} <= idxStart={1}", idxEnd, idxStart);
return s.Substring(idxStart, idxEnd - idxStart);
public static void Main()
Console.WriteLine("=================");
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(null, null));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("", ""));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, test));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("", test));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test,""));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "e"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("e", "e"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a","abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("b", "abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("c", "abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("d", "abc"));
Console.WriteLine("=================");
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(null, null));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("", ""));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, test));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("", test));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, ""));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "e"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("e", "e"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("ab", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "b"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "c"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan(test, "d"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("b", "abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("c", "abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("d", "abc"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("abc", "d"));
Console.WriteLine("=================");
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("aa", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("aaa", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("aaaa", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "a"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "aa"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "aaa"));
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("a", "aaaa"));
test = "aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb";
Console.WriteLine("=================");
Console.WriteLine(test.GetFirstStringBetweenStringsMinSpan("bbbb", "aaaa"));
string result = string.Empty;
Stopwatch sw = new Stopwatch();
result = test.GetFirstStringBetweenStringsMinSpan("aaaaaaa", "bb");
Console.WriteLine(result);
Console.WriteLine(" in " + sw.ElapsedTicks + " ticks.");