Я изучаю регулярные выражения и немного играю с ними. Я предложил себе упражнение, в котором у меня есть метод, удаляющий псевдонимы столбцов в операторе SQL Select. Это должно работать следующим образом:
- Метод может удалять псевдонимы в операторе выбора SQL с ключевым словом AS: «выберите ColumnA AS A».
- Метод может удалять псевдонимы в операторе выбора SQL без ключевого слова AS: «выберите ColumnB B»
- Этот метод может удалять псевдонимы в операторе выбора SQL, который содержит «символы операции» (например, символ операции конкатенации): «выберите «Привет» || ‘мир!’ КАК HelloWorld”
На данный момент я создал два метода, которые работают только в определенных случаях. В следующем коде приводится сводка того, что я сделал, и проблем, с которыми я столкнулся.
static void Main(string[] args)
{
string cols1 = "ColA as AliasA, ColB AliasB , As As ASasas, Asasasas as As";
string cols2 = "'aaa' || 'bbb' AS AliasC , 'ccc' || 'ddd' AliasD";
string answer1 = RemAliases(cols1); // Works fine
string answer2 = RemAliases2(cols2); // Works fine
string answer3 = RemAliases2(cols1); // Doesn't work
string answer4 = RemAliases(cols2); // Doesn't work
}
static string RemAliases2(string inputSql)
{
string pattern1 = @"(.+)\s+AS\s+\w+";
string replacement1 = "$1";
string pattern2 = @"(.+)\s+\w+";
string replacement2 = "$1";
string result = Regex.Replace(inputSql, pattern1, replacement1, RegexOptions.IgnoreCase);
result = Regex.Replace(result, pattern2, replacement2, RegexOptions.IgnoreCase);
return result;
}
static string RemAliases(string inputSql)
{
string pattern1 = @"(\w+)\s+AS\s+\w+";
string replacement1 = "$1";
string pattern2 = @"(\w+)\s+\w+";
string replacement2 = "$1";
string result = Regex.Replace(inputSql, pattern1, replacement1, RegexOptions.IgnoreCase);
result = Regex.Replace(result, pattern2, replacement2, RegexOptions.IgnoreCase);
return result;
}
Я не ожидал, что «RemAliases()» будет нормально работать с «cols2», потому что «\w+» не совпадает с «|». персонаж. Хотя я ожидал, что «RemAliases2()» также будет нормально работать с «cols1». Может ли кто-нибудь помочь мне, чтобы узнать, почему «RemAliases2()» не работает нормально для случая «cols1»? Пожалуйста, не стесняйтесь вносить любые другие предложения о том, как я использовал эти регулярные выражения.
Заранее спасибо.
PS: я использую .NET 2.0