bool IsValidDINCode(jsString code) { var pattern_noIdChar = new RegExp("[A-NP-Z1-9]{1}[0-9]{12}"); var pattern = new RegExp(@Html.RawHasQuote(BarcodeBLL.DINIdChar) + "[A-NP-Z1-9]{1}[0-9]{14}"); return pattern_noIdChar.test(code) || pattern.test(code); }
bool IsValidProductCode(jsString code) { if (code.length != @BarcodeBLL.productLength) return false; var pattern = @Html.RawHasQuote(BarcodeBLL.productIdChar) + "[A-DE-Z1-9]{1}[0-9]{4}[A-Za-z0-9]{1}[A-Z0-9]{1}[a-z0-9]{1}"; var regx = new RegExp(pattern); return regx.test(code); }
bool IsValidDeleteCode(jsString code) { if (code.length != @BarcodeBLL.deleteLength) return false; var pattern = new RegExp(@Html.RawHasQuote(BarcodeBLL.deleteIdChar) + "[0-9]"); return pattern.test(code); }
internal override string RecordDataToString() { return(Order + " " + Preference + " \"" + Flags.ToMasterfileLabelRepresentation() + "\"" + " \"" + Services.ToMasterfileLabelRepresentation() + "\"" + " \"" + RegExp.ToMasterfileLabelRepresentation() + "\"" + " " + Replacement); }
public void StringMatchesBothRegexAutomaton(string pattern1, string pattern2, string matchingString) { var automaton1 = new RegExp(pattern1).ToAutomaton(); var automaton2 = new RegExp(pattern2).ToAutomaton(); var intersection = automaton1.Intersection(automaton2); Assert.True(intersection.Run(matchingString)); }
public void RegExpOneAaa() { RegExp regExp = new RegExp("aaa"); Automaat <string> automaat = ThompsonConstruction.ConvertRegExp(regExp); Assert.AreEqual("(0, a)-->2", automaat.Transitions.ToList()[0].ToString()); Assert.AreEqual("(2, a)-->3", automaat.Transitions.ToList()[1].ToString()); Assert.AreEqual("(3, a)-->1", automaat.Transitions.ToList()[2].ToString()); }
public void StringDoesNotMatchBothRegexAutomaton(string pattern1, string pattern2, string matchingString) { var automaton1 = new RegExp(pattern1).ToAutomaton(); var automaton2 = new RegExp(pattern2).ToAutomaton(); var intersection = automaton1.Intersection(automaton2); Assert.False(intersection.Run(matchingString)); }
public void ExecWorks() { var re = new RegExp("a|b", "g"); var m = re.Exec("xaybz"); //Assert.AreEqual(m.Index, 1); Assert.AreEqual(1, m.Length); Assert.AreEqual("a", m[0]); }
public static string Process(string content,FileInfo info){ string _filename=info.filename; content=reg_preproc.Replace(content,delegate(Rgx::Match m){ switch(m.Groups["name"].Value){ case "output":{ string fn=StringFromLiteral(m.Groups["filename"].Value).ToLower(); if(fn.EndsWith(".js"))fn=fn.Substring(0,fn.Length-3); if(fn!=null)_filename=fn; return ""; } case "include":{ // 読み取るファイル名 string incfile=StringFromLiteral(m.Groups["filename"].Value); if(!System.IO.File.Exists(incfile)){ System.Console.WriteLine("#include 指定した file '{0}' は見つかりませんでした。",incfile); return ""; }else{ System.Console.WriteLine("#include 指定した file '{0}' を取り込みます。",incfile); } // 内容 string inc_content=System.IO.File.ReadAllText(incfile,Program.enc); FileInfo incinfo=new FileInfo(); incinfo.filename=incfile; inc_content=Process(inc_content,incinfo); return @"/*------------------------------------------------------------------- Start of Inclusion from file '"+incfile+@"' -------------------------------------------------------------------*/ (function(){ "+RegExp.Indent(inc_content)+@" })(); /*------------------------------------------------------------------- End of Inclusion -------------------------------------------------------------------*/ "; } case "debug": // ■ debug 0 以外には対応していない。 // ■ 入れ子になっている場合に対応していない System.Console.WriteLine("#debug"); System.Console.WriteLine("#> 一つの debug-region が除去されました"); return "\n"; case "mwgwait":{ string fn=StringFromLiteral(m.Groups["filename"].Value).ToLower(); info.mwg_waits.Add(fn); return ""; } default: System.Console.WriteLine("!{0} は未知のプリプロセッサディレクティブです。無視します。",m.Groups["name"].Value); return m.Value; } }); info.filename=_filename; return content; }
public void RegExpAbDotCd() { RegExp regExp = new RegExp("ab").Dot(new RegExp("cd")); Automaat <string> automaat = ThompsonConstruction.ConvertRegExp(regExp); Assert.AreEqual("(0, a)-->3", automaat.Transitions.ToList()[0].ToString()); Assert.AreEqual("(2, c)-->4", automaat.Transitions.ToList()[1].ToString()); Assert.AreEqual("(3, b)-->2", automaat.Transitions.ToList()[2].ToString()); Assert.AreEqual("(4, d)-->1", automaat.Transitions.ToList()[3].ToString()); }
public void FromPatternShouldMatchCorrectly15() { var re = new RegExp("a{0,2},[a-z]{2,11},_{2,}"); Assert.True(re.Match("a,bz,__")); Assert.True(re.Match(",bzadwqve,____")); Assert.False(re.Match("aaa,bz,__")); Assert.False(re.Match("aaa,ppp,__")); Assert.False(re.Match("a,www,_")); }
public void GetLanguageStarTest() { RegExp regExp = new RegExp("a").Star(); SortedSet <string> language = regExp.GetLanguage(2); Assert.AreEqual(3, language.Count); Assert.AreEqual("", language.ToList()[0]); Assert.AreEqual("a", language.ToList()[1]); Assert.AreEqual("aa", language.ToList()[2]); }
public void FromPatternShouldMatchCorrectly14() { var re = new RegExp("a{0,2}b"); Assert.True(re.Match("b")); Assert.True(re.Match("ab")); Assert.True(re.Match("aab")); Assert.False(re.Match("aaab")); Assert.False(re.Match("abb")); }
public void FromPatternShouldMatchCorrectly22() { var re = new RegExp("[a\\-z]"); Assert.True(re.Match("a")); Assert.True(re.Match("z")); Assert.True(re.Match("-")); Assert.False(re.Match("v")); Assert.False(re.Match("c")); }
public void FromPatternShouldMatchCorrectly13() { var re = new RegExp("[a-z<;A-Z0-9,#\\-]+|_"); Assert.True(re.Match("1a<<<AccAER,ER-34#")); Assert.True(re.Match("a")); Assert.True(re.Match("B;;--;;;BBBBB99")); Assert.True(re.Match("_")); Assert.False(re.Match("_a")); }
public static XElement SaveCurrentUserDetails() { string displayName = HttpContext.Current.Request.Form["displayName"]; string email = HttpContext.Current.Request.Form["email"]; string realName = HttpContext.Current.Request.Form["realName"] ?? string.Empty; string website = HttpContext.Current.Request.Form["website"] ?? string.Empty; string location = HttpContext.Current.Request.Form["location"] ?? string.Empty; string aboutMe = HttpContext.Current.Request.Form["aboutMe"] ?? string.Empty; var errorText = new Hashtable(); var errors = new List <XElement>(); if (string.IsNullOrEmpty(displayName)) { errorText.Add("DisplayName", Utils.GetLocalized("UserDetailsForm", "DisplayName")); displayName = string.Empty; } if (!RegExp.Validate(RegExpLib.Email, email, false)) { errorText.Add("Email", Utils.GetLocalized("UserDetailsForm", "Email")); } if (errorText.Count > 0) { errors.AddRange(from string key in errorText.Keys select new XElement("Error", new XAttribute(key, errorText[key].ToString()))); } else { var userId = new Guid(HttpContext.Current.User.Identity.Name); Users user = DataFacade.GetData <Users>().Where(u => u.Id == userId).FirstOrDefault(); user.DisplayName = displayName; user.Email = email; user.RealName = realName; user.Website = website; user.Location = location; user.AboutMe = aboutMe; DataFacade.Update(user); } Utils.RedirectToReturnUrl(); return(new XElement("User", new XElement("Data", new XAttribute("DisplayName", displayName), new XAttribute("Email", email), new XAttribute("RealName", realName), new XAttribute("Website", website), new XAttribute("Location", location), new XAttribute("AboutMe", aboutMe) ), errors )); }
public void FromPatternShouldMatchCorrectly23() { var re = new RegExp("[01]*1[01]{5}"); var fsm = re.Automaton.Determinize().Minimal(); Assert.True(fsm.Recognize("100000")); Assert.True(fsm.Recognize("111001")); Assert.True(fsm.Recognize("010101111001")); Assert.True(fsm.Recognize("000101110")); Assert.False(fsm.Recognize("000000")); }
public void DeleteHtmlTagsTest() { string str = @"<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую < span>статью</span></p>."; string result = @"Википедия — свободная энциклопедия, в которой каждый может изменить или дополнить любую статью."; Assert.AreEqual(result, RegExp.DeleteHtmlTags(str)); }
public void FromPatternShouldMatchCorrectly20() { var re = new RegExp("[^0-9?\\-^a-z]+"); Assert.True(re.Match(" ")); Assert.True(re.Match("AB()C")); Assert.False(re.Match("-")); Assert.False(re.Match("923481567")); Assert.False(re.Match("vstgko")); Assert.False(re.Match("?")); Assert.False(re.Match("^")); }
public void ReplaceTest01() { String text = "table football, foosball"; RegExp regex = new RegExp("foo*"); String result = text.replace(regex, "T"); Assert.AreEqual <string>("table Ttball, foosball", result); regex = new RegExp("foo*", "g"); result = text.replace(regex, "T"); Assert.AreEqual <string>("table Ttball, Tsball", result); }
public void SearchTest() { String text = "table football, foosball"; RegExp regex = new RegExp("foo*"); Number result = text.search(regex); Assert.AreEqual(6, result); regex = new RegExp("foo*", "g"); result = text.search(regex); Assert.AreEqual(6, result); }
public void RegExpOr() { RegExp regExp = new RegExp("a").Or(new RegExp("b")); Automaat <string> automaat = ThompsonConstruction.ConvertRegExp(regExp); Assert.AreEqual("(0, $)-->2", automaat.Transitions.ToList()[0].ToString()); Assert.AreEqual("(0, $)-->4", automaat.Transitions.ToList()[1].ToString()); Assert.AreEqual("(2, a)-->3", automaat.Transitions.ToList()[2].ToString()); Assert.AreEqual("(3, $)-->1", automaat.Transitions.ToList()[3].ToString()); Assert.AreEqual("(4, b)-->5", automaat.Transitions.ToList()[4].ToString()); Assert.AreEqual("(5, $)-->1", automaat.Transitions.ToList()[5].ToString()); }
public void GeneratedTextIsCorrectWithExpanded(string pattern) { // Generate matches from input pattern string[] result = GenerateTextOfPattern(pattern, defaultRepeatCount); // Recreate pattern based on RegExp's internal representation var r = new RegExp(pattern); var expanded = new RegExp(pattern).ToString(); // Generated matches should also match the expanded expression Assert.All(result, generatedText => Assert.Matches(expanded, generatedText)); }
private IExpression Atom() { IExpression atom; switch (lookAhead.Type) { case ExpressionTokenType.Identifier: return(Identifier()); case ExpressionTokenType.LeftParen: NextToken(); atom = Expression(); if (lookAhead.Type != ExpressionTokenType.RightParen) { throw UnexpectedTokenException("Expected ')'."); } atom = new ParenthesisExpression(atom); break; case ExpressionTokenType.Text: var text = lookAhead.Sequence.Substring(1, lookAhead.Sequence.Length - 2); atom = new Text(text); break; case ExpressionTokenType.Integer: var integer = long.Parse(lookAhead.Sequence, CultureInfo.InvariantCulture); atom = new Integer(integer); break; case ExpressionTokenType.Decimal: var number = double.Parse(lookAhead.Sequence, CultureInfo.InvariantCulture); atom = new Number(number); break; case ExpressionTokenType.True: case ExpressionTokenType.False: var boolean = lookAhead.Sequence.ToLowerInvariant() == "true"; atom = new Boolean(boolean); break; case ExpressionTokenType.RegexPattern: var pattern = lookAhead.Sequence.Substring(1, lookAhead.Sequence.Length - 2); atom = new RegExp(pattern); break; default: throw UnexpectedTokenException(); } NextToken(); return(atom); }
public void FromPatternShouldMatchCorrectly7() { var re = new RegExp("a(b*|c)"); Assert.True(re.Match("ac")); Assert.True(re.Match("abbbb")); Assert.True(re.Match("ab")); Assert.True(re.Match("a")); Assert.False(re.Match("abc")); Assert.False(re.Match("acc")); Assert.False(re.Match(string.Empty)); }
public void FromPatternShouldMatchCorrectly8() { var re = new RegExp("(ab|e)+c?dd"); Assert.True(re.Match("abeeabdd")); Assert.True(re.Match("eecdd")); Assert.True(re.Match("eabdd")); Assert.True(re.Match("ecdd")); Assert.False(re.Match("eabddd")); Assert.False(re.Match("eccdd")); Assert.False(re.Match(string.Empty)); }
protected void Page_Load(object sender, EventArgs e) { Page.Title = "Add/Modify Admin Menu - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"]; ltrheading.Text = "Add/Modify Admin Menu"; if (!Page.IsPostBack) { BindParentMenu(); Page.Title = "Add Admin Menu - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"]; ltrheading.Text = "Add Admin Menu"; if (Request.QueryString["flag"] == "edit") { Title = "Modify Admin Menu - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"]; ltrheading.Text = "Modify Admin Menu"; if (Request.QueryString["id"] != "" && Request.QueryString["id"] != null) { if (RegExp.IsNumericValue(Request.QueryString["id"])) { DataTable dtcontent = new DataTable(); objMenu.idmenu = Convert.ToInt32(Request.QueryString["id"]); dtcontent = objMenu.SelectSingleItemByMenuId(); if (dtcontent.Rows.Count > 0) { txtmenuname.Text = Server.HtmlDecode(dtcontent.Rows[0]["title"].ToString()); ddlParentMenu.SelectedValue = Convert.ToString(dtcontent.Rows[0]["parentid"].ToString()); txtPageName.Text = Server.HtmlDecode(dtcontent.Rows[0]["pageurl"].ToString()); txtImageName.Text = Server.HtmlDecode(dtcontent.Rows[0]["imagepath"].ToString()); txtsortorder.Text = dtcontent.Rows[0]["sortorder"].ToString(); chkvisible.Checked = Convert.ToInt32(dtcontent.Rows[0]["isactive"]) == 1 ? true : false; hfprevsort.Value = dtcontent.Rows[0]["sortorder"].ToString(); //hdpageurl.Value = Server.HtmlDecode(dtcontent.Rows[0]["pageurl"].ToString()); //chkseparate.Checked = Convert.ToInt32(dtcontent.Rows[0]["isseparate"]) == 1 ? true : false; //editorcontentsdesc1.Text = Server.HtmlDecode(dtcontent.Rows[0]["menuDesc"].ToString()); } } else { Response.Redirect("menu.aspx"); } } else { Response.Redirect("menu.aspx"); } } else { txtsortorder.Text = Convert.ToString(CommonFunctions.GetLastSortCount("menu", "sortorder")); } } }
public void FromPatternShouldMatchCorrectly4() { var re = new RegExp("(0|(1(01*(00)*0)*1)*)*"); Assert.True(re.Match(string.Empty)); Assert.True(re.Match("0")); Assert.True(re.Match("00")); Assert.True(re.Match("11")); Assert.True(re.Match("000")); Assert.True(re.Match("011")); Assert.True(re.Match("110")); Assert.True(re.Match("0000")); Assert.True(re.Match("0011")); }
/// <summary> /// IP 地址字符串形式转换成长整型 /// </summary> public static long Ip2Int(string ip) { if (!RegExp.IsIp(ip)) { return(-1); } string[] arr = ip.Split('.'); long lng = long.Parse(arr[0]) * 16777216; lng += int.Parse(arr[1]) * 65536; lng += int.Parse(arr[2]) * 256; lng += int.Parse(arr[3]); return(lng); }
static string Stringize(string content) { const int MAX_WIDTH = 128; content = RegExp.RemoveLineBreaks(content); // 短い場合 if (content.Length <= MAX_WIDTH) { return("'" + RegExp.EscapeSingleQuote(content) + "'"); } // 長い場合 System.Text.StringBuilder b_src = new System.Text.StringBuilder(); b_src.Append("[\n"); bool first = true; int i = 0; for (;;) { int c = content.Length - i; if (c > MAX_WIDTH) { c = MAX_WIDTH; } if (first) { first = false; } else { b_src.Append(",\n"); } b_src.Append('\''); b_src.Append(RegExp.EscapeSingleQuote(content.Substring(i, c))); b_src.Append('\''); i += c; if (i == content.Length) { break; } } b_src.Append("\n].join(\"\")"); return(b_src.ToString()); }
protected void Page_Load(object sender, EventArgs e) { //lblemailerrmsg.Visible = false; //lblusererrmsg.Visible = false; txtfname.Focus(); if (!Page.IsPostBack) { Page.Title = "Add User - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"]; ltrheading.Text = "Add User"; bindadmintype(); if (Request.QueryString["flag"] == "edit") { //bindadmintype(); Title = "Modify User - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"]; ltrheading.Text = "Modify User"; if (Request.QueryString["id"] != "" && Request.QueryString["id"] != null) { if (RegExp.IsNumericValue(Request.QueryString["id"])) { //check is sub admin is viewing his own account if (Session["AdminType"] != null && Convert.ToString(Session["AdminType"]) == "subadmin") { if (Convert.ToInt32(Session["adminId"]) != Convert.ToInt32(Request.QueryString["id"])) { Response.Redirect("adminuser.aspx"); } } BindSingleUser(); } else { Response.Redirect("home.aspx"); } } else { Response.Redirect("home.aspx"); } } else { DataTable dtSeleectedMenu = new DataTable(); BindMenuEditMode(dtSeleectedMenu); } //savemenu.Visible = true; hdTotalMenu.Value = menucount.ToString(); } }
public void MatchTest() { String text = "table football, foosball"; RegExp regex = new RegExp("foo*"); RegExpArray result = text.match(regex); Assert.AreEqual <int>(1, (int)result.length); Assert.AreEqual <string>("foo", result[0]); regex = new RegExp("foo*", "g"); result = text.match(regex); Assert.AreEqual <int>(2, (int)result.length); Assert.AreEqual <string>("foo", result[0]); Assert.AreEqual <string>("foo", result[1]); }
public void RegExpStarAa() { RegExp regExp = new RegExp("aa"); RegExp regExpStar = regExp.Star(); Assert.IsNull(regExp.Left); Assert.IsNull(regExp.Right); Assert.AreEqual(RegExp.OperatorEnum.One, regExp.Operator); Assert.AreEqual("aa", regExp.Terminals); Assert.AreSame(regExp, regExpStar.Left); Assert.IsNull(regExpStar.Right); Assert.AreEqual(RegExp.OperatorEnum.Star, regExpStar.Operator); Assert.AreEqual("", regExpStar.Terminals); }
public void RegExpAbaOrBab() { RegExp regExpLeft = new RegExp("aba"); RegExp regExpRight = new RegExp("bab"); RegExp regExpOr = regExpLeft.Or(regExpRight); Assert.AreEqual("aba", regExpLeft.Terminals); Assert.AreEqual("bab", regExpRight.Terminals); Assert.AreEqual("", regExpOr.Terminals); Assert.AreEqual("aba", regExpOr.Left.Terminals); Assert.AreEqual("bab", regExpOr.Right.Terminals); Assert.AreEqual(RegExp.OperatorEnum.Or, regExpOr.Operator); }
protected void btnHighLight_Click(object sender, EventArgs e) { string _error = string.Empty; // 检查用户输入的数据. if (CheckControlValue(this.ddlLanguage.SelectedValue, this.tbCode.Text, out _error)) { // 初始化根据匹配选项用来保存不同语言代码 // 及其相关正则表达式的散列表变量. Hashtable _htb = CodeManager.Init(); // 初始化合适的集合对象. RegExp _rg = new RegExp(); _rg = (RegExp)_htb[this.ddlLanguage.SelectedValue]; this.lbResult.Visible = true; if (this.ddlLanguage.SelectedValue != "html") { // 在标签控件中显示高亮的代码. this.lbResult.Text = CodeManager.Encode( CodeManager.HighlightCode( Server.HtmlEncode(this.tbCode.Text) .Replace(""", "\""), this.ddlLanguage.SelectedValue, _rg) ); } else { // 在标签控件中显示高亮的代码. this.lbResult.Text = CodeManager.Encode( CodeManager.HighlightHTMLCode(this.tbCode.Text, _htb) ); } } else { this.lbError.Visible = true; this.lbError.Text = _error; } }
public virtual void TestGetRandomAcceptedString() { int ITER1 = AtLeast(100); int ITER2 = AtLeast(100); for (int i = 0; i < ITER1; i++) { RegExp re = new RegExp(AutomatonTestUtil.RandomRegexp(Random()), RegExp.NONE); Automaton a = re.ToAutomaton(); Assert.IsFalse(BasicOperations.IsEmpty(a)); AutomatonTestUtil.RandomAcceptedStrings rx = new AutomatonTestUtil.RandomAcceptedStrings(a); for (int j = 0; j < ITER2; j++) { int[] acc = null; try { acc = rx.GetRandomAcceptedString(Random()); string s = UnicodeUtil.NewString(acc, 0, acc.Length); Assert.IsTrue(BasicOperations.Run(a, s)); } catch (Exception t) { Console.WriteLine("regexp: " + re); if (acc != null) { Console.WriteLine("fail acc re=" + re + " count=" + acc.Length); for (int k = 0; k < acc.Length; k++) { Console.WriteLine(" " + acc[k].ToString("x")); } } throw t; } } } }
private static RegExp MakeInterval(int min, int max, int digits) { var r = new RegExp(); r.kind = Kind.RegexpInterval; r.min = min; r.max = max; r.digits = digits; return r; }
private static RegExp MakeConcatenation(RegExp exp1, RegExp exp2) { if ((exp1.kind == Kind.RegexpChar || exp1.kind == Kind.RegexpString) && (exp2.kind == Kind.RegexpChar || exp2.kind == Kind.RegexpString)) { return RegExp.MakeString(exp1, exp2); } var r = new RegExp(); r.kind = Kind.RegexpConcatenation; if (exp1.kind == Kind.RegexpConcatenation && (exp1.exp2.kind == Kind.RegexpChar || exp1.exp2.kind == Kind.RegexpString) && (exp2.kind == Kind.RegexpChar || exp2.kind == Kind.RegexpString)) { r.exp1 = exp1.exp1; r.exp2 = RegExp.MakeString(exp1.exp2, exp2); } else if ((exp1.kind == Kind.RegexpChar || exp1.kind == Kind.RegexpString) && exp2.kind == Kind.RegexpConcatenation && (exp2.exp1.kind == Kind.RegexpChar || exp2.exp1.kind == Kind.RegexpString)) { r.exp1 = RegExp.MakeString(exp1, exp2.exp1); r.exp2 = exp2.exp2; } else { r.exp1 = exp1; r.exp2 = exp2; } return r; }
private static RegExp MakeEmpty() { var r = new RegExp(); r.kind = Kind.RegexpEmpty; return r; }
private void FindLeaves( RegExp exp, Kind regExpKind, IList<Automaton> list, IDictionary<String, Automaton> automata, IAutomatonProvider automatonProvider, bool minimize) { if (exp.kind == regExpKind) { this.FindLeaves(exp.exp1, regExpKind, list, automata, automatonProvider, minimize); this.FindLeaves(exp.exp2, regExpKind, list, automata, automatonProvider, minimize); } else { list.Add(exp.ToAutomaton(automata, automatonProvider, minimize)); } }
internal static RegExp MakeAutomaton(string s) { RegExp r = new RegExp(); r.kind = Kind.REGEXP_AUTOMATON; r.s = s; return r; }
private static RegExp MakeRepeat(RegExp exp, int min, int max) { var r = new RegExp(); r.kind = Kind.RegexpRepeatMinMax; r.exp1 = exp; r.min = min; r.max = max; return r; }
private static RegExp MakeString(RegExp exp1, RegExp exp2) { var sb = new StringBuilder(); if (exp1.kind == Kind.RegexpString) { sb.Append(exp1.s); } else { sb.Append(exp1.c); } if (exp2.kind == Kind.RegexpString) { sb.Append(exp2.s); } else { sb.Append(exp2.c); } return RegExp.MakeString(sb.ToString()); }
private static RegExp MakeAnyChar() { var r = new RegExp(); r.kind = Kind.RegexpAnyChar; return r; }
private static RegExp MakeAnyString() { var r = new RegExp(); r.kind = Kind.RegexpAnyString; return r; }
public void TestSpecialCase() { RegExp re = new RegExp(".?"); Automaton automaton = re.ToAutomaton(); CharacterRunAutomaton cra = new CharacterRunAutomaton(automaton); ByteRunAutomaton bra = new ByteRunAutomaton(automaton); // make sure character dfa accepts empty string Assert.IsTrue(cra.IsAccept(cra.InitialState)); Assert.IsTrue(cra.Run("")); Assert.IsTrue(cra.Run(new char[0], 0, 0)); // make sure byte dfa accepts empty string Assert.IsTrue(bra.IsAccept(bra.InitialState)); Assert.IsTrue(bra.Run(new byte[0], 0, 0)); }
public EcString[] Match(EcString pattern) { var r = new RegExp(pattern.value); return r.Match(this.value).Select(match => new EcString(match)).ToArray(); }
public void TestSpecialCase3() { RegExp re = new RegExp("(\\鯺)*(.)*\\Ӕ"); string input = "\u5cfd\ufffd\ub2f7\u0033\ue304\u51d7\u3692\udb50\udfb3\u0576\udae2\udc62\u0053\u0449\u04d4"; Automaton automaton = re.ToAutomaton(); CharacterRunAutomaton cra = new CharacterRunAutomaton(automaton); ByteRunAutomaton bra = new ByteRunAutomaton(automaton); Assert.IsTrue(cra.Run(input)); var bytes = input.GetBytes(Encoding.UTF8); Assert.IsTrue(bra.Run(bytes, 0, bytes.Length)); }
public void TestSpecialCase2() { RegExp re = new RegExp(".+\u0775"); string input = "\ufadc\ufffd\ub80b\uda5a\udc68\uf234\u0056\uda5b\udcc1\ufffd\ufffd\u0775"; Automaton automaton = re.ToAutomaton(); CharacterRunAutomaton cra = new CharacterRunAutomaton(automaton); ByteRunAutomaton bra = new ByteRunAutomaton(automaton); Assert.IsTrue(cra.Run(input)); var bytes = input.GetBytes(Encoding.UTF8); Assert.IsTrue(bra.Run(bytes, 0, bytes.Length)); // this one fails! }
internal RepetitionAtLeastOneRegExp(RegExp expression, Greediness greediness = Greediness.GreedyQuantification) : base(expression, greediness) { }
private static RegExp MakeOptional(RegExp exp) { var r = new RegExp(); r.kind = Kind.RegexpOptional; r.exp1 = exp; return r; }
private static RegExp MakeAutomaton(string s) { var r = new RegExp(); r.kind = Kind.RegexpAutomaton; r.s = s; return r; }
private static RegExp MakeRepeat(RegExp exp) { var r = new RegExp(); r.kind = Kind.RegexpRepeat; r.exp1 = exp; return r; }
private static RegExp MakeChar(char @char) { var r = new RegExp(); r.kind = Kind.RegexpChar; r.c = @char; return r; }
private static RegExp MakeString(string @string) { var r = new RegExp(); r.kind = Kind.RegexpString; r.s = @string; return r; }
private static RegExp MakeCharRange(char from, char to) { var r = new RegExp(); r.kind = Kind.RegexpCharRange; r.from = from; r.to = to; return r; }
private static RegExp MakeUnion(RegExp exp1, RegExp exp2) { var r = new RegExp(); r.kind = Kind.RegexpUnion; r.exp1 = exp1; r.exp2 = exp2; return r; }
private static RegExp MakeComplement(RegExp exp) { var r = new RegExp(); r.kind = Kind.RegexpComplement; r.exp1 = exp; return r; }
/// <summary> /// Initializes a new instance of the <see cref = "RegExp" /> class from a string. /// </summary> /// <param name = "s">A string with the regular expression.</param> /// <param name = "syntaxFlags">Boolean 'or' of optional syntax constructs to be enabled.</param> public RegExp(string s, RegExpSyntaxOptions syntaxFlags) { this.b = s; this.flags = syntaxFlags; RegExp e; if (s.Length == 0) { e = RegExp.MakeString(string.Empty); } else { e = this.ParseUnionExp(); if (this.pos < b.Length) { throw new ArgumentException("end-of-string expected at position " + this.pos); } } this.kind = e.kind; this.exp1 = e.exp1; this.exp2 = e.exp2; this.s = e.s; this.c = e.c; this.min = e.min; this.max = e.max; this.digits = e.digits; this.from = e.from; this.to = e.to; this.b = null; }
internal static RegExp MakeInterval(int min, int max, int digits) { RegExp r = new RegExp(); r.kind = Kind.REGEXP_INTERVAL; r.Min = min; r.Max = max; r.Digits = digits; return r; }