Beispiel #1
0
        /// <summary>
        /// Returns a regex that accepts the complement of this regex.
        /// </summary>
        /// <param name="regex">this regex</param>
        /// <param name="timeout">timeout to complement in ms</param>
        /// <returns></returns>
        public static Regex Complement(this Regex regex, int timeout = 10000)
        {
            var solver    = new CharSetSolver();
            var aut       = solver.Convert(regex.ToString(), regex.Options).RemoveEpsilons();
            var aut_det   = aut.Determinize(timeout);
            var aut_min_c = aut_det.Minimize().Complement();
            var pattern   = solver.ConvertToRegex(aut_min_c);

            return(new Regex(pattern, regex.Options));
        }