盡管這是一個基本示例,但圍繞轉義引號的問題太多了,以至于這個關于字串變數的基本問題似乎迷失在“噪音”中。
出于此問題的目的,C# 始終位于 Visual Studio C# 的背景關系中,在本例中為 Visual Studio-2019。
在 C# 中,我要測驗模式匹配的字串中的變數和包含該模式的字串都用引號引起來。這些引號出現在 C# 程式代碼和除錯器字串變數值中。這似乎是不可避免的。
由于這些引號本身是 C# 字串變數的一部分,因此我希望正則運算式將它們作為標準語法的一部分忽略它們。
情況似乎如此。但是,我想驗證它是否正常作業,以及它是如何作業的。
例子:
string ourTestString = "Smith";
string ourRegexToMatch = "^(Sm)";
Regex ourRegexVar = new Regex(ourRegexToMatch, RegexOptions.Singleline);
var matchColleciton = ourRegexVar.Matches(ourTestString);
bool ourMatch = matchColleciton.Count == 1;
目的是匹配行首的 Sm 并且當前區分大小寫。
在上面的代碼中,ourMatch 確實是真實的,正如預期/希望的那樣。
在除錯器中顯示,ourRegexVar 本身沒有圍繞 C# 變數的引號。所有我認為是此類正則運算式變數的標準的東西都有大括號。
人們可以很容易地想象復雜的場景,其中涉及確實有引號和轉義引號等的字串,因此它可能會比上面相當簡單的示例復雜得多。
我的問題是: 就正則運算式和 C# 變數而言,對于 ourTestString C# 字串變數和 ourRegexToMatch C# 變數來說,它是否總是與 C# 字串變數的編譯器誘導的“”完全一樣?
uj5u.com熱心網友回復:
引號告訴編譯器它是一個字串。記憶體中的字串不使用引號分隔。
如果字串中有引號,例如Sm"ith,則必須將其轉義,如下所示:
var s1 = "Sm\"ith";
var s2 = @"Sm""ith";
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/524946.html
