public void RegexTransform2() { string e = @"^ ([a-zA-Z][-+.a-zA-Z\d]*): (?# 1: scheme) (?: ((?:[-_.!~*'()a-zA-Z\d;?:@&=+$,]|%[a-fA-F\d]{2})(?:[-_.!~*'()a-zA-Z\d;/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*) (?# 2: opaque) | (?:(?: //(?: (?:(?:((?:[-_.!~*'()a-zA-Z\d;:&=+$,]|%[a-fA-F\d]{2})*)@)? (?# 3: userinfo) (?:((?:(?:(?:[a-zA-Z\d](?:[-a-zA-Z\d]*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:[-a-zA-Z\d]*[a-zA-Z\d])?)\.?|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[(?:(?:[a-fA-F\d]{1,4}:)*(?:[a-fA-F\d]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|(?:(?:[a-fA-F\d]{1,4}:)*[a-fA-F\d]{1,4})?::(?:(?:[a-fA-F\d]{1,4}:)*(?:[a-fA-F\d]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))?)\]))(?::(\d*))?))?(?# 4: host, 5: port) | ((?:[-_.!~*'()a-zA-Z\d$,;+@&=+]|%[a-fA-F\d]{2})+) (?# 6: registry) ) | (?!//)) (?# XXX: '//' is the mark for hostport) (/(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*(?:;(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*)*(?:/(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*(?:;(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*)*)*)? (?# 7: path) )(?:\?((?:[-_.!~*'()a-zA-Z\d;/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*))? (?# 8: query) ) (?:\#((?:[-_.!~*'()a-zA-Z\d;/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*))? (?# 9: fragment) $"; string t = StringRegex.TransformPattern(e, RubyRegexOptions.Extended | RubyRegexOptions.Multiline); Assert(e == t); new Regex(t); }
public async Task <CodeMemberMethod> GCode_CodeDom_GenerateTransitionLambdaMethod(CodeTypeDeclaration codeClass, LinkPinControl element, GenerateCodeContext_Method context) { var name = StringRegex.GetValidName("Transition" + HostNodesContainer.TitleString + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id) + "_Lambda"); foreach (var member in codeClass.Members) { if (member is CodeGenerateSystem.CodeDom.CodeMemberMethod) { var existMethod = member as CodeGenerateSystem.CodeDom.CodeMemberMethod; if (existMethod.Name == name) { return(existMethod); } } } CodeGenerateSystem.CodeDom.CodeMemberMethod method = new CodeGenerateSystem.CodeDom.CodeMemberMethod() { Name = name, Attributes = MemberAttributes.Public | MemberAttributes.Final, ReturnType = new CodeTypeReference(typeof(bool)), }; codeClass.Members.Add(method); if (!mCtrlValueInputHandle.HasLink) { method.Statements.Add(new CodeMethodReturnStatement(new CodePrimitiveExpression(true))); } else { var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); var methodContext = new GenerateCodeContext_Method(context.ClassContext, method); if (!linkObj.IsOnlyReturnValue) { await linkObj.GCode_CodeDom_GenerateCode(codeClass, method.Statements, linkElm, methodContext); } var exp = linkObj.GCode_CodeDom_GetValue(mCtrlValueInputHandle.GetLinkedPinControl(0), methodContext); method.Statements.Add(new CodeMethodReturnStatement(exp)); } return(method); }
public void RegexEscape1() { string[] patterns = new string[] { @"", @"", @"\", @"\\", @"(*)", @"\(\*\)", "$_^_|_[_]_(_)_\\_._#_-_{_}_*_+_?_\t_\n_\r_\f_\v_\a_\b", @"\$_\^_\|_\[_\]_\(_\)_\\_\._\#_\-_\{_\}_\*_\+_\?_\t_\n_\r_\f_" + "\v_\a_\b" }; for (int i = 0; i < patterns.Length; i += 2) { string expected = patterns[i + 1]; string actual = StringRegex.Escape(patterns[i]); Assert(actual == expected); } }
public void RegexTransform1() { string[] incorrectPatterns = new string[] { @"\", @"\", @"\\\", @"\\\", @"\x", @"\x", @"\1", // TODO @"\1", }; string[] correctPatterns = new string[] { @"", @"", @"\\", @"\\", @"\_", @"_", @"abc\0\01\011\a\sabc\Wabc\w", @"abc\0\01\011\a\sabc\Wabc\w", @"\xd", @"\x0d", @"\xdz", @"\x0dz", @"\*", @"\*", @"\[", @"\[", @"\#", @"\#", @"\0", @"\0", @"\G", @"\G", @"[a\-z]", @"[a\-z]", }; for (int i = 0; i < incorrectPatterns.Length; i += 2) { string expected = incorrectPatterns[i + 1]; string actual = StringRegex.TransformPattern(incorrectPatterns[i], RubyRegexOptions.NONE); Assert(actual == expected); } for (int i = 0; i < correctPatterns.Length; i += 2) { string expected = correctPatterns[i + 1]; string actual = StringRegex.TransformPattern(correctPatterns[i], RubyRegexOptions.NONE); Assert(actual == expected); new Regex(expected); } }