.net 为什么可以';t I匹配POSIX字符类
以下代码段打印的是.net 为什么可以';t I匹配POSIX字符类,.net,regex,posix,.net,Regex,Posix,以下代码段打印的是False: Console.WriteLine(Regex.IsMatch("abc", @"[[:alpha:]]")); 但这会打印出True: Console.WriteLine(Regex.IsMatch("abc", @"[a-zA-Z]")); 为什么??NET正则表达式不支持Posix字符类。但是,它们确实支持Unicode组 这将有助于: Regex.IsMatch(“abc”,“@”^\p{L}+$” \p{L}组匹配所有Unicode字母 有关更多信息
False
:
Console.WriteLine(Regex.IsMatch("abc", @"[[:alpha:]]"));
但这会打印出True
:
Console.WriteLine(Regex.IsMatch("abc", @"[a-zA-Z]"));
为什么??NET正则表达式不支持Posix字符类。但是,它们确实支持Unicode组 这将有助于:
Regex.IsMatch(“abc”,“@”^\p{L}+$”代码>
\p{L}
组匹配所有Unicode字母
有关更多信息,请参见此处:
您有任何理由相信.NET的正则表达式语言支持POSIX字符类吗?我想它只支持Unicode命名的类别/块。@Gabe-I支持,但这只是因为我读错了东西!另外,我在这里看到的一些标记为.NET
的问题也通过POSIX字符类得到了回答。有关可接受的类别和块的列表,请参阅。不幸的是,Unicode categoryL
并不对应于所有字母。这就是UnicodePropList.txt
定义其他字母属性的原因,该属性与L
类别和Nl
一起构成DerivedCoreProperties.txt
中的字母属性。应用程序几乎总是需要知道某个字符具有字母属性,而不是categoryL
。不幸的是,您不会注意到这一差异,直到您的一个用户(其语言使用非拉丁字母)在您的坏应用程序部署很久之后抱怨…:-(