/* * 检查是否是空白符 */ internal void EatWhiteSpaceForRegex() { char c; while (reader.NEof()) { c = reader.CurrChar(); if (HtmlConst.IsWhiteSpaceWithoutlineBreak(c)) { reader.IncPos(); continue; } return; } }
/// <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; }