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

Flutter正则需求:匹配含转义单引号的双引号包裹.tr结尾内容

解决方案

要匹配双引号包裹、以.tr结尾且支持转义单引号(如"Hello, I\'m Chris".tr)的内容,可按以下步骤调整正则表达式:

正确的正则表达式(Dart/Flutter)

使用Dart的raw字符串(前缀r)定义正则,避免转义混乱:

final doubleQuoteTrRegex = RegExp(r'"[^"\\]*(?:\\.[^"\\]*)*"\s*\.tr\b');

正则逻辑说明

  • ":匹配开头的双引号
  • [^"\\]*:匹配任意非双引号、非反斜杠的字符(正常内容)
  • (?:\\.[^"\\]*)*:匹配转义序列(如\'、\"等),后跟任意非双引号、非反斜杠的字符,可重复多次
  • ":匹配结尾的未转义双引号
  • \s*:匹配引号与.tr之间的任意空白字符(可选)
  • \.tr\b:匹配.tr后缀,\b确保是完整的单词边界(避免匹配类似.tra的内容)

常见错误排查

若修改后Flutter报错,大概率是字符串转义问题:

  • 错误写法1:使用r""包裹时未转义内部双引号

    // 错误:r""内部的双引号需写成""
    final wrongRegex = RegExp(r""""[^"\\]*(?:\\.[^"\\]*)*"\s*\.tr\b""");
    

    解决:改用r'...'包裹,内部双引号无需转义(如上面的正确写法)。

  • 错误写法2:未使用raw字符串,反斜杠转义不完整

    // 错误:非raw字符串中每个反斜杠需写两次
    final wrongRegex = RegExp("\"[^\"\\]*(?:\\.[^\"\\]*)*\"\\s*\\.tr\\b");
    

    解决:要么改用raw字符串,要么将所有反斜杠替换为双反斜杠:

    final fixedRegex = RegExp("\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\\s*\\.tr\\b");
    

测试验证

针对边界案例"Hello, I\'m Chris".tr,上述正则会完整匹配整个字符串,包括转义的单引号部分,不会提前终止匹配。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:50:35