模式中包含\Uxxxxxxxx 字符的 C# 正则表达式

标签 c# regex unicode astral-plane

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/

相关文章:

Python、unicodedata 名称和代码点值,我缺少什么?

c# - DDD 基础设施服务

c# - 以两种不同的方式比较两个字符串

c# - 用更好的图案替换铸件

regex - 在Grails中使用自定义验证时给出自定义错误消息的问题

python - 将 unicode 数组转换为 numpy

c# - 信号量如何从另一个线程中释放?

java - 解析器的缓冲区如何工作?匹配正则表达式

python - 在 Python 中分配和测试正则表达式?

c++ - 在 C++ 中设置编码的最正确方法是什么?