/// <summary> /// 返回表示单个字符的正则表达式。 /// </summary> /// <param name="ch">要表示的字符。</param> /// <returns>表示单个字符的正则表达式。</returns> public static Regex Symbol(char ch) { RegexCharClass cc = new RegexCharClass(); cc.AddChar(ch); return(new CharClassExp(cc.ToStringClass())); }
/// <summary> /// 根据当前的正则表达式构造 NFA。 /// </summary> /// <param name="nfa">要构造的 NFA。</param> internal override void BuildNfa(Nfa nfa) { string str = literal; if (ignoreCase) { str = literal.ToUpper(culture); } nfa.HeadState = nfa.NewState(); nfa.TailState = nfa.HeadState; for (int i = 0; i < literal.Length; i++) { NfaState state = nfa.NewState(); if (culture == null) { // 区分大小写。 nfa.TailState.Add(state, str[i]); } else { // 不区分大小写。 RegexCharClass cc = new RegexCharClass(); cc.AddChar(str[i]); cc.AddChar(char.ToLower(str[i], culture)); nfa.TailState.Add(state, cc.ToStringClass()); } nfa.TailState = state; } }
/// <summary> /// 返回表示字符类的正则表达式。 /// </summary> /// <param name="cc">正则表达式表示的字符类。</param> /// <returns>表示字符类的正则表达式。</returns> public static Regex CharClass(RegexCharClass cc) { if (cc == null) { throw CommonExceptions.ArgumentNull("cc"); } return(new CharClassExp(cc.ToStringClass())); }
/// <summary> /// 返回表示单个不区分大小写的字符的正则表达式。 /// </summary> /// <param name="ch">要表示的字符。</param> /// <param name="culture">转换大小写使用的区域性信息。</param> /// <returns>表示单个字符的正则表达式。</returns> public static Regex SymbolIgnoreCase(char ch, CultureInfo culture) { char upperCase = char.ToUpper(ch, culture); char lowerCase = char.ToLower(ch, culture); RegexCharClass cc = new RegexCharClass(); if (upperCase == lowerCase) { // 大小写相同。 cc.AddChar(upperCase); } else { // 大小写不用。 cc.AddChar(upperCase); cc.AddChar(lowerCase); } return(new CharClassExp(cc.ToStringClass())); }
/// <summary> /// 返回表示字符类的正则表达式。 /// </summary> /// <param name="cc">正则表达式表示的字符类。</param> /// <returns>表示字符类的正则表达式。</returns> public static Regex CharClass(RegexCharClass cc) { if (cc == null) { throw CommonExceptions.ArgumentNull("cc"); } return new CharClassExp(cc.ToStringClass()); }
/// <summary> /// 返回表示单个不区分大小写的字符的正则表达式。 /// </summary> /// <param name="ch">要表示的字符。</param> /// <param name="culture">转换大小写使用的区域性信息。</param> /// <returns>表示单个字符的正则表达式。</returns> public static Regex SymbolIgnoreCase(char ch, CultureInfo culture) { char upperCase = char.ToUpper(ch, culture); char lowerCase = char.ToLower(ch, culture); RegexCharClass cc = new RegexCharClass(); if (upperCase == lowerCase) { // 大小写相同。 cc.AddChar(upperCase); } else { // 大小写不用。 cc.AddChar(upperCase); cc.AddChar(lowerCase); } return new CharClassExp(cc.ToStringClass()); }
/// <summary> /// 返回表示单个字符的正则表达式。 /// </summary> /// <param name="ch">要表示的字符。</param> /// <returns>表示单个字符的正则表达式。</returns> public static Regex Symbol(char ch) { RegexCharClass cc = new RegexCharClass(); cc.AddChar(ch); return new CharClassExp(cc.ToStringClass()); }
/// <summary> /// 扫描 '\'(不包含 '\' 本身)之后的字符,并返回相应的正则表达式。 /// </summary> /// <returns>相应的正则表达式。</returns> private Regex ScanBackslash() { RegexCharClass cc; int ich; switch (ich = reader.Read()) { case 'w': return Regex.CharClass( UseOptionEcma ? RegexCharClass.EcmaWordClass : RegexCharClass.WordClass); case 'W': return Regex.CharClass( UseOptionEcma ? RegexCharClass.NotEcmaWordClass : RegexCharClass.NotWordClass); case 's': return Regex.CharClass( UseOptionEcma ? RegexCharClass.EcmaSpaceClass : RegexCharClass.SpaceClass); case 'S': return Regex.CharClass( UseOptionEcma ? RegexCharClass.NotEcmaSpaceClass : RegexCharClass.NotSpaceClass); case 'd': return Regex.CharClass( UseOptionEcma ? RegexCharClass.EcmaDigitClass : RegexCharClass.DigitClass); case 'D': return Regex.CharClass( UseOptionEcma ? RegexCharClass.NotEcmaDigitClass : RegexCharClass.NotDigitClass); case 'p': case 'P': cc = new RegexCharClass(); cc.AddCategoryFromName(ScanProperty(), ich != 'p', UseOptionIgnoreCase, pattern); if (UseOptionIgnoreCase) { cc.AddLowercase(culture); } return Regex.CharClass(cc.ToStringClass()); case -1: ThrowIllegalEndEscape(); return null; default: reader.Unget(); char ch = ScanCharEscape(); if (UseOptionIgnoreCase) { return Regex.SymbolIgnoreCase(ch, culture); } else { return Regex.Symbol(ch); } } }
/// <summary> /// 返回表示字符类的正则表达式。 /// </summary> /// <param name="cc">正则表达式表示的字符类。</param> /// <returns>表示字符类的正则表达式。</returns> public static Regex CharClass(RegexCharClass cc) { ExceptionHelper.CheckArgumentNull(cc, "cc"); return new CharClassExp(cc.ToStringClass()); }