Saya mempelajari ekspresi reguler dan sedikit bermain-main dengannya. Saya mengusulkan sendiri sebuah latihan di mana saya memiliki metode yang menghapus alias kolom dalam pernyataan SQL Select. Ini seharusnya berfungsi seperti ini:
- Metode ini dapat menghapus alias dalam pernyataan pemilihan SQL dengan kata kunci AS: “pilih KolomA AS A”
- Metode ini dapat menghapus alias dalam pernyataan pemilihan SQL tanpa kata kunci AS: “pilih KolomB B”
- Metode ini dapat menghapus alias dalam pernyataan pemilihan SQL yang berisi “karakter operasi” (seperti karakter operasi gabungan): “pilih 'Halo' || 'dunia!' SEBAGAI HelloWorld”
Sejauh ini saya telah membuat dua metode yang hanya berfungsi pada kasus tertentu. Kode berikut memberikan ringkasan tentang apa yang telah saya lakukan dan masalah yang saya hadapi.
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;
}
Saya tidak mengharapkan "RemAliases()" berfungsi dengan baik dengan "cols2", karena "\w+" tidak cocok dengan "|" karakter. Meskipun demikian, saya mengharapkan "RemAliases2()" juga berfungsi dengan baik dengan "cols1". Bisakah seseorang memberi saya bantuan untuk mengetahui mengapa "RemAliases2()" tidak berfungsi dengan baik untuk kasus "cols1"? Mohon, jangan ragu untuk memberikan saran lain tentang cara saya menggunakan ekspresi reguler ini.
Terima kasih sebelumnya.
PS: Saya menggunakan .NET 2.0