private void FindRegexDelimiters(StringBuilder pattern, out int start, out int end)
{
int i = 0;
while (i < pattern.Length && Char.IsWhiteSpace(pattern[i])) i++;
if (i == pattern.Length)
throw new ArgumentException("RegExp empty");
char start_delimiter = pattern[i++];
if (Char.IsLetterOrDigit(start_delimiter) || start_delimiter == '\\')
throw new ArgumentException("Something bad with delimiter");
start = i;
char end_delimiter;
if (start_delimiter == '[') end_delimiter = ']';
else if (start_delimiter == '(') end_delimiter = ')';
else if (start_delimiter == '{') end_delimiter = '}';
else if (start_delimiter == '<') end_delimiter = '>';
else end_delimiter = start_delimiter;
int depth = 1;
while (i < pattern.Length)
{
if (pattern[i] == '\\' && i + 1 < pattern.Length)
{
i += 2;
continue;
}
else if (pattern[i] == end_delimiter) // (1) should precede (2) to handle end_delim == start_delim case
{
depth--;
if (depth == 0) break;
}
else if (pattern[i] == start_delimiter) // (2)
{
depth++;
}
i++;
}
if (i == pattern.Length)
throw new ArgumentException("No end delimiter");
end = i - 1;
}