如何在Flutter/Dart中编写匹配Unicode块的正则表达式
Dart/Flutter 适配.NET CJK Unicode正则方案
报错原因
Dart 正则的Unicode属性遵循ICU标准,和.NET专属的IsXXX格式块命名规则不兼容,你尝试的无属性前缀写法不符合Dart正则要求,因此触发报错。
无需手动录入码点的实现方案
直接使用ICU标准的Block属性前缀搭配对应块名即可,你需要的所有CJK相关块的正确写法如下:
- CJK符号和标点:
\p{Block=CJK_Symbols_And_Punctuation} - 带圈CJK字母和月份:
\p{Block=Enclosed_CJK_Letters_And_Months} - CJK兼容区:
\p{Block=CJK_Compatibility} - CJK统一表意文字扩展A:
\p{Block=CJK_Unified_Ideographs_Extension_A} - CJK统一表意文字:
\p{Block=CJK_Unified_Ideographs} - CJK兼容表意文字:
\p{Block=CJK_Compatibility_Ideographs} - CJK兼容形式:
\p{Block=CJK_Compatibility_Forms}
如果你只需要匹配所有汉字,也可以直接使用\p{Script=Han},替换你之前错误的\p{Han}写法即可。
可用示例代码
import 'dart:developer'; void main() { final cjkRegex = RegExp( r'[\p{Block=CJK_Symbols_And_Punctuation}\p{Block=Enclosed_CJK_Letters_And_Months}\p{Block=CJK_Compatibility}\p{Block=CJK_Unified_Ideographs_Extension_A}\p{Block=CJK_Unified_Ideographs}\p{Block=CJK_Compatibility_Ideographs}\p{Block=CJK_Compatibility_Forms}]', unicode: true, ); var something = "你好,测试123".replaceAll(cjkRegex, ""); log(something); // 输出 123 }
内容的提问来源于stack exchange,提问作者tofutim
相关产品推荐
相关产品推荐

