为什么我不能匹配POSIX字符类

dlr*_*as2 6 .net regex posix

以下代码段打印False:

Console.WriteLine(Regex.IsMatch("abc", @"[[:alpha:]]"));
Run Code Online (Sandbox Code Playgroud)

但这打印True:

Console.WriteLine(Regex.IsMatch("abc", @"[a-zA-Z]"));
Run Code Online (Sandbox Code Playgroud)

为什么?它们不应该是等价的吗?

gym*_*all 9

.NET正则表达式不支持Posix字符类.但它们确实支持Unicode组.

这可行:

Regex.IsMatch("abc", @"^\p{L}+$");

\p{L}组匹配所有Unicode字母.

浏览此处获取更多信息:

http://msdn.microsoft.com/en-us/library/20bw873z.aspx#CategoryOrBlock

  • 有关可接受类别和块的列表,请参见http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories. (2认同)
  • 不幸的是,Unicode 类别“L”并不对应于所有字母。这就是为什么 Unicode `PropList.txt` 定义了 `Other_Alphabetic` 属性,它与 `L` 类别和 `Nl` 一起组成了 `DerivedCoreProperties.txt` 中的 `Alphabetic` 属性。应用程序几乎总是需要知道一个字符具有“Alphabetic”属性,而不是类别“L”。不幸的是,您不会注意到这种差异,直到您的语言使用非拉丁字母的用户之一抱怨,在您损坏的应用程序部署很久之后......:-( (2认同)