Esempio n. 1
0
        /// <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()));
        }
Esempio n. 2
0
        /// <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;
            }
        }
Esempio n. 3
0
 /// <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()));
 }
Esempio n. 4
0
        /// <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()));
        }
Esempio n. 5
0
		/// <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());
		}
Esempio n. 6
0
		/// <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());
		}
Esempio n. 7
0
		/// <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());
		}
Esempio n. 8
0
		/// <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);
					}
			}
		}
Esempio n. 9
0
		/// <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;
			}
		}
Esempio n. 10
0
		/// <summary>
		/// 返回表示字符类的正则表达式。
		/// </summary>
		/// <param name="cc">正则表达式表示的字符类。</param>
		/// <returns>表示字符类的正则表达式。</returns>
		public static Regex CharClass(RegexCharClass cc)
		{
			ExceptionHelper.CheckArgumentNull(cc, "cc");
			return new CharClassExp(cc.ToStringClass());
		}