[研究]Visual Studio 2019或 Notepad++ 以正規表示式來取代字串
2024-03-06
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19
********************************************************************************
為何同時考慮 Visual Studo 和 Notepad++,因為 2 者的正規表示式用法可能不同;另外Visual Studio 中某次大量替換程式碼,居然執行到 Visual Studio 當掉,Notepad++ 又快又可跑完,所以能否順利替換和執行速度也是考慮。
********************************************************************************
Visual Studio 中,
F1 = Func1(x1,y1);
F2 = Func1(x2,y2);
Visual Studio 2019 能字串替換,變成
F1 = Func1(x1,Func2(y1));
F2 = Func1(x2,Func2(y2));
嗎? 如何做?
ChatGPT
- 打開你的程式碼檔案。
- 使用快捷鍵Ctrl + H,或者在選單列中選擇“編輯” -> “取代”來打開“取代”對話方塊。
- 在“尋找”方塊中輸入 Func1\((.*?),\s*(.*?)\); ,在“取代”方塊中輸入 Func1($1, Func2($2)); 。
- 這個正則表達式會匹配 Func1(x1,y1); 這樣的字串,並且捕獲括號內的內容作為第一個和第二個捕獲組。
- 在取代中, $1 表示第一個捕獲組的內容,即 x1,$2 表示第二個捕獲組的內容,即 y1。
- 取代的字串就是你想要的格式,即 Func1(x1,Func2(y1));。
- 在取代對話方塊中點擊“全部取代”或者“逐個取代”來進行取代操作。
完成後,你的程式碼就會被替換成你想要的格式了。
********************************************************************************
User
Notepad++ 能做到嗎 ?
ChatGPT
當然,以下是在Notepad++中執行此操作的步驟:
- 打開你的程式碼檔案。
- 使用快捷鍵Ctrl + H,或者在功能列中選擇“搜尋” -> “取代”以打開“搜尋和取代”對話框。
- 在“尋找”框中輸入 Func1\((.*?),\s*(.*?)\); ,在“取代”框中輸入 Func1($1, Func2($2)); 。
- 這個正則表達式將匹配 Func1(x1,y1); 這樣的字串,並捕獲括號內的內容作為第一和第二個捕獲組。
- 在取代中, $1 表示第一個捕獲組的內容,即 x1,$2 表示第二個捕獲組的內容,即 y1。
- 取代的字串即為你想要的格式,即 Func1(x1,Func2(y1));。
- 在對話框中點擊“全部取代”或“逐個取代”以執行取代操作。
完成後,你的程式碼將以所需的格式進行替換。
********************************************************************************
Visual Studio 中,
F1 = Func1(x1,y1);
F2 = Func1(x2,Func2(y2));
F3 = Func1(x2,y3);
Visual Studio 2019 能字符串替換,變成
F1 = Func1(x1,Func2(y1));
F2 = Func1(x2,Func2(y2));
F3 = Func1(x2,Func2(y3));
?如何做? 也就是已經套用 Func2 的不再套用,未套用的則套用
ChatGPT
在Visual Studio 2019中,要實現這樣的替換,你可以藉助正規表達式和條件替換來完成。 以下是具體步驟:
打開你的程式碼檔案。
- 使用快速鍵Ctrl + H,或在選單列中選擇「編輯」 -> 「取代」來開啟「取代」對話方塊。
- 在「尋找」方塊中輸入 Func1\((.*?),\s*(.*?)\); ,在「取代」方塊中輸入如下正規表示式取代模式:Func1\($1, (Func2\()?($2)\)?\);
- 這個正規表示式將匹配 Func1(x1,y1); 這樣的字串,並且捕獲括號內的內容作為第一個和第二個捕獲組。 如果第二個參數已經套用了 Func2,那麼將不再套用,如果未套用,則會套用。
- 點選「正規表示式」複選框以啟用正規表示式搜尋模式。
- 點選「全部替換」或「逐一替換」來進行替換操作。
完成後,你的程式碼將按照你期望的方式進行替換。
********************************************************************************
Visual Studio 中,
F1 = Func1(x1,y1);
F2 = Func1(x2,Func2(y2));
F3 = Func1(x3,y3);
F4 = FuncX(x4,y4);
F5 = FuncX(x5,y5);
Visual Studio 2019 能字符串替換,變成
F1 = Func1(x1,Func2(y1));
F2 = Func1(x2,Func2(y2));
F3 = Func1(x2,Func2(y3));
F4 = FuncX(x4,y4);
F5 = FuncX(x5,y5);
嗎?如何做?
也就是添加 Func2() 是只對 Func1 中的參數,不處理 FuncX 中的參數;
另外,已經套用 Func2 的不再套用,未套用的則套用,請用繁體中文
ChatGPT
在 Visual Studio 2019 中,你可以使用正則表達式來實現這樣的替換。請按照以下步驟進行操作:
- 打開你的程式碼文件。
- 使用快捷鍵 Ctrl + H,或者在功能列中選擇“編輯” -> “取代”以打開“取代”對話方塊。
- 在“尋找”框中輸入 Func1\((.*?),\s*(.*?)\); ,在“取代”框中輸入以下的正則表達式替換模式:
- Func1\(($1), (Func2\()?($2)\)?\);
- 這個正則表達式會匹配 Func1(x1,y1); 這樣的字串,並且捕獲括號內的內容作為第一和第二個捕獲組。如果第二個參數已經套用了 Func2,則不再套用,如果未套用,則會套用。
- 點擊“正則表達式”複選框以啟用正則表達式搜索模式。
- 點擊“全部取代”或“逐個取代”來執行取代操作。
完成後,你的程式碼將按照你期望的方式進行替換。
command.Parameters.AddWithValue("@ID", id);
輸入 .Parameters.AddWithValue\((.*?),\s*(.*?)\);
注意 Parameters 前面包含句點 .
換成 .Parameters.AddWithValue\(($1), (Common.MyAntiXssFilter\()?($2)\)?\);
Notepad++,因為 C# 大小寫不同,「區分大小寫」建議勾選。勾選「規則運算式」。
下圖,失敗了,ChatGPT 給的作法有問題
再次修正並測試
command.Parameters.AddWithValue("@ID", id);
輸入 .Parameters.AddWithValue\((.*?),\s*(.*?)\);
注意 Parameters 前面包含句點 .
上次換成 .Parameters.AddWithValue\(($1), (Common.MyAntiXssFilter\()?($2)\)?\);
這次換成 .Parameters.AddWithValue\(($1), (Common.MyAntiXssFilter\()($2)\)\);
下圖,Visual Studio 2019 中編譯成功。
但是 Parameters.AddWithValue("@AAA", Common.MyAntiXssFilter(aaa));
變成 Parameters.AddWithValue("@AAA", Common.MyAntiXssFilter(Common.MyAntiXssFilter(bbb)));
********************************************************************************
改用 Visual Studio 2019 測試
command.Parameters.AddWithValue("@ID", id);
輸入 .Parameters.AddWithValue\((.*?),\s*(.*?)\);
注意 Parameters 前面包含句點 .
換成 .Parameters.AddWithValue\(($1), (Common.MyAntiXssFilter\()?($2)\)?\);
進行編譯,一堆錯誤,檢視替換結果,不能用,也和 Notepad++ 替換結果不同,表示 2 者的正規表示法用法並不相同。
********************************************************************************
失敗,有空再研究。
(待續)
相關
沒有留言:
張貼留言