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
相关产品推荐
相关产品推荐

