diff --git a/source/ContractConfigurator/ExpressionParser/ExpressionParser.cs b/source/ContractConfigurator/ExpressionParser/ExpressionParser.cs index 7bf252f6..f49dc8eb 100644 --- a/source/ContractConfigurator/ExpressionParser/ExpressionParser.cs +++ b/source/ContractConfigurator/ExpressionParser/ExpressionParser.cs @@ -1353,7 +1353,7 @@ public virtual T ParseDataStoreIdentifier(Token token) public Token ParseIdentifier() { - Match m = Regex.Match(expression, @"([A-Za-z][\w\d]*).*"); + Match m = Regex.Match(expression, @"([A-Za-z][A-Za-z0-9_]*).*"); string identifier = m.Groups[1].Value; expression = (expression.Length > identifier.Length ? expression.Substring(identifier.Length) : ""); @@ -1365,7 +1365,7 @@ public Token ParseIdentifier() public Token ParseSpecialIdentifier() { - Match m = Regex.Match(expression, @"^@(/?(?>([A-Za-z][\w\d]*|\.\.)/)*[A-Za-z][\w\d:]*).*"); + Match m = Regex.Match(expression, @"^@(/?(?>(?:[A-Za-z][A-Za-z0-9_]*|\.\.)/)*[A-Za-z][A-Za-z0-9_]*(?::[A-Za-z][A-Za-z0-9_]*)*).*"); string identifier = m.Groups[1].Value; expression = (expression.Length > identifier.Length + 1 ? expression.Substring(identifier.Length + 1) : ""); @@ -1374,7 +1374,7 @@ public Token ParseSpecialIdentifier() public Token ParseDataStoreIdentifier() { - Match m = Regex.Match(expression, @"^\$(/?(?>([A-Za-z][\w\d]*|\.\.)/)*[A-Za-z][\w\d:]*).*"); + Match m = Regex.Match(expression, @"^\$(/?(?>(?:[A-Za-z][A-Za-z0-9_]*|\.\.)/)*[A-Za-z][A-Za-z0-9_]*(?::[A-Za-z][A-Za-z0-9_]*)*).*"); string identifier = m.Groups[1].Value; expression = (expression.Length > identifier.Length + 1 ? expression.Substring(identifier.Length + 1) : ""); diff --git a/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/ListExpressionParser.cs b/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/ListExpressionParser.cs index 8a5d5d37..3a4cc0c3 100644 --- a/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/ListExpressionParser.cs +++ b/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/ListExpressionParser.cs @@ -230,7 +230,7 @@ public TResult ParseWhereMethod(List obj) ParseToken("("); // Get the identifier for the object - Match m = Regex.Match(expression, @"([A-Za-z][\w\d]*)[\s]*=>[\s]*(.*)"); + Match m = Regex.Match(expression, @"([A-Za-z][A-Za-z0-9_]*)[\s]*=>[\s]*(.*)"); string identifier = m.Groups[1].Value; expression = (string.IsNullOrEmpty(identifier) ? expression : m.Groups[2].Value); diff --git a/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/StringExpressionParser.cs b/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/StringExpressionParser.cs index e9b107aa..cdefcf8c 100644 --- a/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/StringExpressionParser.cs +++ b/source/ContractConfigurator/ExpressionParser/Parsers/SimpleTypes/StringExpressionParser.cs @@ -93,7 +93,7 @@ public override TResult ParseStatement() else { // Check for an immediate function call - Match m = Regex.Match(expression, @"^\w[\w\d]*\("); + Match m = Regex.Match(expression, @"^[A-Za-z][A-Za-z0-9_]*\("); if (m.Success) { return base.ParseStatement(); @@ -110,7 +110,7 @@ public override TResult ParseStatement() int dataStoreIdentifierIndex = m.Success ? m.Index : -1; // Look for function calls - m = Regex.Match(expression, @"(\A|\s)\w[\w\d]*\("); + m = Regex.Match(expression, @"(\A|\s)[A-Za-z][A-Za-z0-9_]*\("); int functionIndex = m == Match.Empty ? -1 : m.Index; // Look for an end quote