You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:01