2015-06-15 77 views
0

我創建了一個可工作的PCRE正則表達式(用於查找郵政信箱地址條目),該正則表達式在C#中引發解析器錯誤。C#無效的字符

錯誤是因爲「\」。和我的模式中的「\ s」字符。

的錯誤是: 「無效的字符」

這裏是正則表達式

^(?!.*p\.?o\.?\s+?box).*$ 

下面是實現

[RegularExpression("^(?!.*p\.?o\.?\s+?box).*$", ErrorMessage = "We cannot ship to PO boxes")] 

會有人幫我這?

謝謝

+0

從技術上講,這不是PCRE,儘管它使用相同的語法。 – BoltClock

回答

7

這是因爲反斜槓。把你的正則表達式作爲逐字字符串文字。雙引號內的單個反斜槓將被視爲轉義序列。

@"^(?!.*p\.?o\.?\s+?box).*$" 

逐字字符串由一個@字符後跟一個雙引號字符,零個或多個字符,並且結束的雙引號字符的。一個簡單的例子是@「你好」。在逐字字符串文字中,分隔符之間的字符是逐字解釋的,唯一的例外是引號轉義序列。特別是,簡單字符串文字中不處理簡單轉義序列和十六進制和Unicode轉義序列。逐字字符串文字可能跨越多行。

+2

需要更多的上下文,@符號告訴編譯器把它當作文字,只是因爲反斜槓並不是一個合適的答案 –

+0

有意義。謝謝 – Slinky

1

由於反斜槓作爲轉義字符處理您可能需要給你的字符串作爲逐字字符串:

@"^(?!.*p\.?o\.?\s+?box).*$" 

或者你需要把兩個反斜槓,而不是一個像如下:

"^(?!.*p\\.?o\\.?\\s+?box).*$"