我有一個正則表達式來檢查腳本語言中的有效標識符。它們以字母或下劃線開頭,可以跟隨0個或多個字母,下劃線,數字和$符號。但是,如果我打電話正則表達式奇數
Util.IsValidIdentifier("hello\n");
它返回true。我的正則表達式是
const string IDENTIFIER_REGEX = @"^[A-Za-z_][A-Za-z0-9_\$]*$";
那麼「\ n」如何得到?
我有一個正則表達式來檢查腳本語言中的有效標識符。它們以字母或下劃線開頭,可以跟隨0個或多個字母,下劃線,數字和$符號。但是,如果我打電話正則表達式奇數
Util.IsValidIdentifier("hello\n");
它返回true。我的正則表達式是
const string IDENTIFIER_REGEX = @"^[A-Za-z_][A-Za-z0-9_\$]*$";
那麼「\ n」如何得到?
$
與行尾相符。您需要使用\z
來匹配文本的末尾,以及RegexOptions.Multiline
。您可能還想使用\A
而不是^
來匹配文本的開頭,而不是線條。
此外,您不需要轉義字符類中的$
。
謝謝,它排序! –
@JulianGold不客氣。 – ctn
因爲$是一個有效的元字符,它意味着字符串的結尾(或行末,就在換行符之前)。從msdn:
$:匹配必須發生在字符串的末尾或在行或字符串末尾的\ n之前。
你應該逃避它:\$
(並且如果你想匹配那裏的字符串的末尾加\z
)。
你的結果是true
與hello\n
,因爲你不需要逃避$
字符類中,從而反斜線匹配,因爲你的字符類中的反斜槓(視爲文本)。
試試這個:
const string IDENTIFIER_REGEX = @"^[A-Za-z_][A-Za-z0-9_$]*$";
由於要測試的變量名是在一行中,你可以使用$
作爲字符串的結尾。
''你好\ n「'沒有反斜槓 – ctn
Wut? lawl。你的第二個字符類有一個反斜槓。看起來,你試圖「逃避」「尾線」角色,但你實際上做的是允許反斜槓和美元符號。在字符級別內,美元符號是美元符號。試圖逃脫它只是告訴它,你想讓斜槓和美元符號。 – Suamere
而不是'@「^(?i)[a-z _] [\ w $] * $」;'...(?i)表示不區分大小寫,\ w表示單詞字符,其中包括A-Za -z0-9和下劃線。 – Suamere
這仍然不是很正確:什麼工作是@「^(?i)[a-z _] [\ w $] * \ z」 –