2013-03-08 77 views

回答

1

因爲^字符類內部的含義與外部不同。它意味着否定階級角色。所以,我的正則表達式將使一切除了\^

Regex nameValidator = new Regex(@"^[^^\\]+$"); 
+0

new Regex(@「^ [^^ \\] + $」);會有兩個否定。插入符號必須用反斜線,而不是其他插入符號。 – 2013-03-08 10:11:28

+0

@DasKrümelmonster你嘗試過嗎? – VladL 2013-03-08 10:14:26

+0

我剛剛做了,學到了一些東西。抱歉過早的批評。有一個upvote :-) – 2013-03-08 10:18:27

0

試試這個方法:

Regex nameValidator = new Regex(@"^[^\^\\]+$"); 

string sample_text = "hello world"; 
bool isMatch = nameValidator.IsMatch(sample_text); // true 

sample_text = @"Hello^\world "; 
isMatch = nameValidator.IsMatch(sample_text); // false 
0

的\轉義的字符串在C#中文字反斜線。您的正則表達式(因爲正則表達式engione看到它)因此是

^[\^]+$ 

哪個是有效的,但不是你想要的。 (推薦)

new Regex("[\\\\\\^]+"); 

或字符串文字之前使用@

new Regex(@"[\\\^]+"); 

你必須逃離這兩個反斜線和插入符號,所以:(的關心得到由反斜線) 更改爲三重反斜槓。要在沒有@的字符串文字中使用它們,你必須再次將每個反斜槓轉義,所以你有六個。

+0

這些不起作用。我希望我的字符串包含0-9,a-z和任何其他字符,但不是\或^ – Ale 2013-03-08 10:25:24

+0

正確。就像你原來的正則表達式一樣,它只有^和$來匹配整個字符串。糾正。請注意,它匹配任何帶有^或\的字符串。我發現在正則表達式中使用否定更優雅,而不是使用!isMatch() – 2013-03-08 10:35:34