Regex.IsMatch( "foo", "[\U00010000-\U0010FFFF]" )
抛出:System.ArgumentException:以相反顺序解析“[-]”- [x-y] 范围。
查看\U00010000 和\U0010FFF 的十六进制值,我得到:第一个字符为 0xd800 0xdc00,第二个字符为 0xdbff 0xdfff。
所以我想我确实遇到了一个问题。为什么用\U组成的Unicode字符在字符串中分成两个字符?
最佳答案
它们是 surrogate pairs .查看值 - 它们超过 65535。char 只是一个 16 位值。如何用 16 位表达 65536?
不幸的是,文档中并不清楚 .NET 中的正则表达式引擎如何(或是否)处理不在基本多语言平面中的字符。 (正则表达式文档中的\uxxxx 模式只涵盖 0-65535,就像\uxxxx 作为 C# 转义序列一样。)
您真正的正则表达式是否更大,或者您实际上只是想查看其中是否有任何非 BMP 字符?
关于模式中包含\Uxxxxxxxx 字符的 C# 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/364009/