Dart中如何实现Perl正则全局替换的等效代码
Dart 实现对应Perl正则全局替换逻辑
Dart 中做正则全局替换需要使用 String.replaceAllMapped 方法,该方法会自动匹配所有符合规则的非重叠片段(等效Perl替换的/g全局修饰符),通过回调函数获取捕获组内容完成拼接。
核心正则模式和Perl写法一致,注意用 raw 字符串(前缀r)编写正则,避免反斜杠转义问题:RegExp(r'([a-zA-Z]+)\.([a-zA-Z]+)')
第一种替换逻辑(点替换为punto)
对应Perl语句:$current_segment =~ s/([a-zA-Z]+)\.([a-zA-Z]+)/$1 punto $2/g;
等效Dart代码:
// 原始待处理字符串 String currentSegment = "你的原始文本内容,例如www.xyz"; final letterDotLetterPattern = RegExp(r'([a-zA-Z]+)\.([a-zA-Z]+)'); // 执行全局替换 String processedSegment = currentSegment.replaceAllMapped( letterDotLetterPattern, (match) => '${match.group(1)} punto ${match.group(2)}' );
第二种替换逻辑(点替换为:)
对应Perl语句:$someText =~ s/([a-zA-Z]+)\.([a-zA-Z]+)/$1 : $2/g;
等效Dart代码:
// 原始待处理字符串 String someText = "你的原始文本内容,例如www.xyz"; // 可复用上面定义的正则实例,无需重复创建 String processedText = someText.replaceAllMapped( letterDotLetterPattern, (match) => '${match.group(1)} : ${match.group(2)}' );
注意事项:Dart的普通
replaceAll方法不支持$1这类正则捕获组占位符,不要直接套用Perl的替换字符串写法,必须通过replaceAllMapped的回调参数获取捕获组内容。
捕获组索引从1开始,match.group(0)代表整个正则匹配到的完整片段。
内容的提问来源于stack exchange,提问作者Bid
相关产品推荐
相关产品推荐

