Udger.Parser.PerlRegExpConverter.FindRegexDelimiters C# (CSharp) Méthode

FindRegexDelimiters() private méthode

private FindRegexDelimiters ( StringBuilder pattern, int &start, int &end ) : void
pattern StringBuilder
start int
end int
Résultat void
        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;
        }