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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:09:23