예제 #1
0
        /*
         * 检查是否是空白符
         */
        internal void EatWhiteSpaceForRegex()
        {
            char c;

            while (reader.NEof())
            {
                c = reader.CurrChar();
                if (HtmlConst.IsWhiteSpaceWithoutlineBreak(c))
                {
                    reader.IncPos();
                    continue;
                }
                return;
            }
        }
예제 #2
0
        /// <summary>
        /// 格式化正则
        /// </summary>
        internal void FormatterRegex()
        {
            char c   = HtmlConst.CHEMPTY;
            int  pos = reader.pos - 1;

            //正则必须在一行,如果换行则必须欺骗回溯
            while (reader.NEof())
            {
                c = reader.CurrChar();
                switch (c)
                {
                case HtmlConst.CHCL:
                    goto LABEL_CHECK;

                case HtmlConst.CHTCL:
                    reader.IncPosTwice();
                    continue;

                case HtmlConst.CHLB:
                case HtmlConst.CHNL:
                    goto LABEL_TRICK;

                default:
                    break;
                }
                reader.IncPos();
            }

LABEL_CHECK:
            if (reader.NEofWithInc())
            {
                reader.IncPos();
                do
                {
                    c = reader.CurrChar();
                    if (HtmlConst.IsWhiteSpaceWithoutlineBreak(c) || (c == 'g' || c == 'i' || c == 'm'))
                    {
                        reader.IncPos();
                        continue;
                    }
                    break;
                } while (reader.NEof());
            }


            switch (c)
            {
            case '.':
            case ',':
            case '|':
            case '&':
            case '!':
            case '=':
            case '\r':
            case '\n':
            case ')':
                return;

            case '<':
                if (reader.NextChar() == '/')
                {
                    reader.minPos();
                    return;
                }
                break;

            default:
                break;
            }

            //欺骗回溯
LABEL_TRICK:
            reader.pos = pos;
            return;
        }