private ParsedExpression Parse(ProxyContext context, string expression) { logger.LogDebug("Parsing an expression: {0}", expression); var instructions = new List <dynamic>(); int index = 0; int len = expression.Length; var routeVariables = context.Settings.VariableTrie; var sb = new StringBuilder(expression.Length); void ProcessLastSegment() { if (sb.Length == 0) { return; } instructions.Add(sb.ToString()); sb.Clear(); } while (index < len) { var c = expression[index++]; if (c != '$') { sb.Append(c); continue; } int varNameStartIndex = index; while (index < len) { if (!PatternVariables.IsValidVariableChar(expression[index], isFirstChar: varNameStartIndex == index)) { break; } index++; } if (varNameStartIndex == index) { sb.AppendDollar(); continue; } // Is it a system variable? var varName = expression[varNameStartIndex..index];
public void IsValidVariableChar_AllValidChars_Success() { var name = "abcdefghijklmnopqrstvuwxyzABCDEFGHIJKLMNOPQRSTVUWXYZ0123456789_"; name.All(c => PatternVariables.IsValidVariableChar(c, false)).Should().BeTrue(); }