2015-05-18 40 views
2

我想用正則表達式來匹配Unicode字符。我發現這可以使用Unicode Category or Block或更準確地使用這些Unicode CategoriesSupported Named Blocks如何使用.net匹配Unicode字符?

問題是我無法使用LINQPAD 4Regex.IsMatch函數使其工作。例如,試圖匹配一個簡單的拉丁字符是這樣的:

Console.WriteLine(Regex.IsMatch("d", @"[\0000-\007F]+")); 

引發以下錯誤:

ArgumentException4 parsing "[\0000-\007F]+" - [x-y] range in reverse order.

,並使用此:

Console.WriteLine(Regex.IsMatch("d", @"\L{IsBasicLatin}{1}")); 

給我:

parsing "\L{IsBasicLatin}{1}" - Unrecognized escape sequence \L.

在我真實的情況下,我我打算用IsCyrillic替換IsLatin,但我需要使其與拉丁文一起工作,以確保它是OK

任何人都可以告訴我做錯了什麼嗎?

+1

我相信你使用了錯誤的轉義字符。查看手冊:https://msdn.microsoft.com/en-us/library/20bw873z%28v=vs.110%29.aspx。你正在尋找的角色是\ p imo。 – Santhos

+0

所有字符都是Unicode。那麼,問題是什麼? –

回答

5

您正在使用的字符octal representation代替十六進制,這將創建一個無效的範圍(因爲第一,\000被解析爲一個八進制字符,然後0-\007遇到並導致自0錯誤有32 DECMAL碼)。

使用\x\u符號,例如:

[\x00-\x7F]+ 

這將控制字符(包括零碼元)一起捕捉整個ASCII範圍。

而第二個問題,您需要使用\p以及腳本名稱,例如,

\p{IsBasicLatin} 

查看更多about Unicode categories here