簡體   English   中英

C# 正則表達式不允許正確使用特殊字符?

[英]C# regex does not allow special characters correctly?

例如我有以下字符串:

thats a\n\ntest\nwith multiline \n\nthings...

我嘗試使用以下代碼,該代碼無法正常工作,但仍未包含所有字符:

string text = "thats a\n\ntest\nwith multiline \n\nthings and so on";
var res = Regex.IsMatch(text, @"^([a-zA-Z0-9äöüÄÖÜß\-|()[\]/%'<>_?!=,*. ':;#+\\])+$");
Console.WriteLine(res);

我希望正則表達式在only包含以下字符時返回 true (不必包含所有字符,但至少包含以下字符之一且不包含其他字符): azAZ0-9äüöÄÖÜß.#'-:,;? ^"§$%&/()=?\}][{³²°*+~'_<>| .#'-:,;? ^"§$%&/()=?\}][{³²°*+~'_<>| .

這是我認為在消息中使用會很好的已知鍵盤字符列表。

如果您指定了所有要允許的字符,則 C# 中的正則表達式聲明將如下所示

@"^[a-zA-Z0-9äüöÄÖÜß!#'\-.:,; ^""§$%&/()=?\\}\][{³²°*+~'_<>|]+$"

但是,您提供的測試字符串包含換行符 (LF, \n , \x0A ) 字符,因此您需要在沒有換行符的字符串上進行測試,或者將\n添加到字符 class 中:

@"^[a-zA-Z0-9äüöÄÖÜß!#'\-.:,; ^""§$%&/()=?\\}\][{³²°*+~'_<>|\n]+$"

請注意, "字符是加倍的,因為這是將雙引號放入逐字字符串文字的唯一方法。

此外,模式中的捕獲括號會產生多余的開銷,您應該刪除它們。

暫無
暫無

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

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