簡體   English   中英

如何在字符串中查找特殊字符並替換它們

[英]How to find the special characters in a string and replace them

我有一個要求,我必須用新的數據庫名稱替換動態sql中的數據庫名稱。 就像是

select * from DBName.TableName

需要轉換為

select * from newDBName.TableName

---

select * from [DbName.TableName]

需要轉換為

select * from [NewDbName.TableName]

一個簡單的String.Replace可能無法解決您的問題,因為搜索文本可能會出現在您不想更改的其他位置。

進行這種轉換的安全方法是解析SQL語句並執行上下文替換。

對於正則表達式,這可以說是一個很好的用例。 我建議以下簡約模式:

(?i)\bDbname\b

這里的想法是在任何情況下都使用單詞邊界\\b和不區分大小寫的內聯(?i)修飾符來匹配字符串。

一個更復雜的模式可能看起來像這樣:

(?i)(?<=\[|\b)DBNAME(?=\b|\])

在線演示

代碼樣例

更嚴格地說,我們可以添加一個額外的前錨,例如FROM

(?<=FROM\s+\[?)Dbname(?=\..+?\]?\b)

說明

  • (?<=FROM\\s+\\[?)后面使用正號,以使用關鍵字FROM為錨點,后接一個或多個空格\\s字符,然后是一個可選的]
  • Dbname有問題的文字字符串
  • (?=\\..+?\\]?\\b)跨表名的正向查找,直到出現下一個單詞邊界\\b

我使用環視功能,因為它們不貢獻匹配結果$0 這使得在替換中易於使用。

代碼示例

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=FROM\s+\[?)(Dbname)(?=\..+?\]?)";
        string substitution = @"newDbName";
        string input = @"select * from DBName.TableName
select * from [DbName.TableName]";
        RegexOptions options = RegexOptions.Multiline | RegexOptions.IgnoreCase;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM