我正在解析SQL查询并将它们转换为特定于域的语言。为此,我正在使用Regex模式匹配。
例如如果匹配TableName.ColumnName
(例如Customer.RecordNumber
),那么我需要用$1*
替换此字符串,如果有另一列(例如Customer.Forename
),则{ {1}}等等。
这是我的代码:
$2*
匹配完全匹配的位置,但是当存在类似Dictionary<string, string> FieldsUsed = new Dictionary<string, string>();
string[] words = sql.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
int x = 1;
string regPattern = "^" + TableAlias + ".\\w+$";
for (int i = 0; i < words.Length; ++i)
{
string word = words[i];
Regex regex = new Regex(regPattern, RegexOptions.IgnoreCase);
Match match = regex.Match(word);
if (match.Success)
{
string fldNo = "$" + x.ToString() + "*";
if (!FieldsUsed.ContainsKey(match.Value))
{
FieldsUsed.Add(match.Value, fldNo);
words[i] = fldNo;
++x;
}
}
}
的表达式时,则正则表达式失败。
有人可以指出正确的正则表达式,它会从上述两个场景中提取所需的值(即TableName.FieldName)吗?