我想使用正则表达式匹配Unicode字符。我发现可以使用Unicode Category or Block或更准确地使用这些Unicode Categories和Supported Named Blocks。
问题是我无法使用LINQPAD 4
和Regex.IsMatch
功能使其正常工作。例如,尝试匹配一个简单的拉丁字符,如下所示:
Console.WriteLine(Regex.IsMatch("d", @"[\0000-\007F]+"));
引发以下错误:
ArgumentException4解析“[\ 0000- \ 007F] +” - [x-y]范围反向 顺序。
并使用此:
Console.WriteLine(Regex.IsMatch("d", @"\L{IsBasicLatin}{1}"));
给了我:
解析“\ L {IsBasicLatin} {1}” - 无法识别的转义序列\ L.
在我的实际案例中,我将用IsLatin
替换IsCyrillic
,但我需要让它与拉丁语一起使用,以确保它是OK
。
有谁能说出我做错了什么?
答案 0 :(得分:5)
您正在使用octal representation个字符而不是十六进制,这会创建一个无效范围(因为首先,\000
被解析为八进制字符,然后{{遇到错误并导致错误,因为0-\007
有一个0
十进制代码。)
使用32
或\x
表示法,例如:
\u
这将捕获整个ASCII范围以及控制字符(包括NULL符号)。
第二个问题,您需要将[\x00-\x7F]+
与脚本名称一起使用,例如
\p