掌握REGEXP_REPLACE:从正则表达式原理到SQL文本清洗实战
1. 从“替换”到“重塑”为什么你需要掌握REGEXP_REPLACE在数据处理和文本清洗的日常工作中我们最常打交道的就是字符串。无论是从数据库里导出的用户日志还是从API接口爬取的商品信息原始文本往往夹杂着各种“杂质”多余的空格、乱码字符、不一致的日期格式、需要脱敏的手机号中间四位或是HTML标签。面对这些简单的REPLACE函数常常力不从心因为它要求你知道确切的、固定的字符序列。但现实情况是我们需要处理的往往是模式而非固定文本。这就是正则表达式Regular Expression大显身手的地方。而REGEXP_REPLACE则是将正则表达式的强大模式匹配能力与字符串替换功能完美结合的工具。它不再问你“要把‘ABC’换成什么”而是问你“要把所有符合‘连续三个大写字母’这个模式的东西换成什么”。这个思维的转变是处理复杂文本问题的分水岭。最近在数据清洗的社群里regexp_replace去特殊符号成了一个高频讨论点这恰恰反映了大家在处理非结构化数据时的共同痛点。特殊符号可能来自不同的编码、复制粘贴的富文本或是系统间的非法字符它们没有固定的位置和数量用常规方法清理起来繁琐且易错。REGEXP_REPLACE提供了一种声明式的解决方案你只需要定义“什么是特殊符号”它就能帮你一扫而光。这篇文章我将以一个多年与脏数据“搏斗”的老兵视角为你彻底拆解REGEXP_REPLACE。我们不只讲语法更要深入它背后的匹配逻辑、性能陷阱和那些官方文档里不会写的实战技巧。无论你是SQL分析师、后端开发还是数据工程师掌握它意味着你拥有了将混乱文本重塑为规整数据的“手术刀”。2. REGEXP_REPLACE的核心语法与匹配逻辑拆解不同数据库系统如MySQL、PostgreSQL、Oracle、Hive、Spark SQL对REGEXP_REPLACE的支持和语法细节略有不同但其核心思想是一致的。我们以兼容性较好的PostgreSQL及与其语法相近的Redshift、BigQuery的语法作为基准进行讲解因为它功能相对完整和清晰。2.1 基础语法结构REGEXP_REPLACE函数的基本调用形式如下REGEXP_REPLACE(source_string, pattern, replacement_string, [flags])它包含四个参数其中前三个是必需的source_string需要进行搜索和替换的原始文本字符串。pattern一个正则表达式模式定义了要在source_string中查找的内容。replacement_string用于替换每个匹配到的pattern的字符串。flags可选一个或多个修饰符用于改变匹配行为如是否区分大小写、是否多行匹配等。函数执行时会在source_string中从左到右扫描寻找所有与pattern匹配的子串然后用replacement_string替换掉这些子串最后返回替换完成的新字符串。如果没有找到匹配项则原样返回source_string。2.2 理解“替换”的粒度全局替换与首次替换这是新手最容易困惑的点之一。REGEXP_REPLACE默认是全局替换Global Replace吗答案是取决于数据库系统和flags参数。在PostgreSQL/Redshift中默认行为是替换所有匹配项全局替换。除非你使用g标志不在PG中g标志是用于指定使用POSIX正则表达式而不是控制全局替换。实际上PG的regexp_replace在默认情况下就会替换所有匹配项。如果你只想替换第一个匹配项需要使用g标志的反面即指定一个起始位置参数或者使用SUBSTRING配合regexp_matches。更常见的做法是使用regexp_replace的另一个重载形式它包含一个start参数但通常我们通过flags中的nnewline-sensitive等标志来影响匹配全局替换是默认行为。为了清晰起见我们记住结论在常见场景下它默认替换所有。在MySQL中REGEXP_REPLACE函数MySQL 8.0默认只替换第一个匹配项。如果你想替换所有匹配项必须显式地在flags参数中加上g。在Hive/Spark SQL中行为类似MySQL通常需要g标志来进行全局替换。实操心得永远不要假设默认行为。在编写跨平台SQL脚本或使用新数据库时第一件事就是写一个简单的测试用例验证REGEXP_REPLACE的默认替换行为。例如用SELECT REGEXP_REPLACE(aaa, a, b);测试如果返回bbb则是全局替换返回baa则是只替换第一个。这个小习惯能避免很多隐蔽的错误。2.3 关键参数flags详解flags参数是一个字符串通过单个字符控制不同的匹配模式。常见的标志包括i忽略大小写Case-insensitive。例如模式abc可以匹配abc、Abc、ABC。g全局匹配Global。如上所述在某些系统中用于启用替换所有匹配项而在另一些系统中可能是默认或无效。m多行模式Multiline。改变^和$的含义使它们分别匹配每一行的开头和结尾而不是整个字符串的开头和结尾。这在处理包含换行符的文本块时非常有用。n点号.匹配换行符。默认情况下.匹配除换行符外的任何字符。使用n标志后.将匹配任何字符包括换行符。x忽略模式中的空白字符和注释。允许你在复杂的正则表达式中添加空格和注释以提高可读性。你可以组合使用多个标志例如gi表示全局替换且忽略大小写。2.4 替换字符串中的“魔法变量”反向引用replacement_string并非只能是固定文本。它可以使用反向引用来引用在pattern中被括号()捕获的子组。这是REGEXP_REPLACE最强大的特性之一。语法在replacement_string中使用\1、\2、\3……来分别引用第一个、第二个、第三个捕获组的内容。经典案例日期格式重排假设原始日期格式是MM/DD/YYYY如12/31/2023我们需要将其转换为YYYY-MM-DD格式2023-12-31。SELECT REGEXP_REPLACE(12/31/2023, (\d{2})/(\d{2})/(\d{4}), \3-\1-\2); -- 结果2023-12-31拆解模式(\d{2})/(\d{2})/(\d{4})匹配两个数字月、斜杠、两个数字日、斜杠、四个数字年。三对括号创建了三个捕获组。替换字符串\3-\1-\2意味着用“第三组年 ‘-’ 第一组月 ‘-’ 第二组日”来替换整个匹配到的日期字符串。避坑指南不同数据库对反向引用的语法可能不同。在PostgreSQL中使用\1、\2而在MySQL中使用$1、$2。在Oracle中也是使用\1、\2。混淆语法会导致替换失败或出现字面值\1。务必查阅你所使用数据库的官方文档。3. 实战演练从基础清洗到复杂重构理解了核心逻辑后我们通过一系列由浅入深的场景来看看REGEXP_REPLACE如何解决实际问题。3.1 场景一基础清洗——移除所有特殊符号和多余空格这是“网络热词”对应的经典场景。假设我们有一串混乱的用户输入用户输入“ Hello, World! This is a test-string... ”目标保留字母、数字、汉字和单个空格移除其他所有标点、特殊符号并压缩多余空格。WITH sample_data AS ( SELECT Hello, World! This is a test-string... AS dirty_text ) SELECT dirty_text AS 原始文本, -- 第一步移除所有非字母、数字、汉字和空格之外的字符 REGEXP_REPLACE(dirty_text, [^a-zA-Z0-9\u4e00-\u9fa5\s], , g) AS step1, -- 第二步将连续多个空格压缩为单个空格 REGEXP_REPLACE( REGEXP_REPLACE(dirty_text, [^a-zA-Z0-9\u4e00-\u9fa5\s], , g), \s, , g ) AS step2, -- 第三步去除首尾空格也可用TRIM这里演示REGEXP REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE(dirty_text, [^a-zA-Z0-9\u4e00-\u9fa5\s], , g), \s, , g ), ^\s|\s$, , g ) AS 最终清洗结果 FROM sample_data;执行结果预估step1: Hello World This is a teststring (逗号、感叹号、连字符、句点被移除)step2: Hello World This is a teststring (连续空格被压缩)最终清洗结果:Hello World This is a teststring(首尾空格被移除)模式解释[^...]这是一个否定字符集。匹配任何不在方括号内的字符。a-zA-Z0-9匹配所有大小写字母和数字。\u4e00-\u9fa5这是Unicode范围匹配基本的中文字符。这是一个常用但并非完全精确的汉字范围对于绝大多数场景足够用。\s匹配任何空白字符空格、制表符、换行符等。\s匹配一个或多个空白字符。^\s|\s$匹配字符串开头的一个或多个空白符(^\s)或者(|)字符串结尾的一个或多个空白符(\s$)。注意事项清洗逻辑的步骤顺序很重要。如果先压缩空格可能会把“单词特殊符号空格”变成“单词 空格”然后再移除特殊符号结果中间就只剩一个空格逻辑上可能没问题但思考起来更绕。通常“先移除杂质再规整格式”的顺序更清晰。3.2 场景二数据脱敏——隐藏手机号中间四位这是一个常见的隐私保护需求。假设我们有一列user_contact里面混杂着各种信息我们需要找到并脱敏其中的手机号。SELECT user_contact AS 原始信息, REGEXP_REPLACE( user_contact, (\d{3})(\d{4})(\d{4}), -- 匹配11位手机号并分成3组 \1****\3, -- 用“前3位 **** 后4位”替换 g ) AS 脱敏后信息 FROM user_table;模式解释(\d{3})(\d{4})(\d{4})精确匹配11位数字并将其分为三组。替换时第一组(\1)和第三组(\3)保留中间的第二组被替换为四个星号****。进阶思考这个模式会匹配任何连续的11位数字包括可能不是手机号的数字如身份证号的一部分。在严格场景下需要更精确的模式例如匹配以特定号段如13x, 14x, 15x, 17x, 18x, 19x开头的数字(1[3-9]\d)(\d{4})(\d{4})。3.3 场景三复杂提取与重构——解析非标准化地址假设地址数据以混乱的字符串存储“北京市海淀区中关村大街27号100080张三收”。我们希望提取出省市区、街道、邮编和姓名。这超出了简单替换的范围但REGEXP_REPLACE可以配合捕获组进行重构。不过更优雅的方式可能是使用REGEXP_SUBSTR或REGEXP_MATCHES来提取。这里我们用REGEXP_REPLACE展示一种“提取-保留”的思路即用替换的方式“删掉”我们不想要的部分或者重新排列。SELECT address_str AS 原始地址, -- 提取姓名假设“收”字前是姓名 REGEXP_REPLACE(address_str, ^.*([^])收$, \1) AS 提取的姓名, -- 重构地址格式移除姓名和邮编 REGEXP_REPLACE( REGEXP_REPLACE(address_str, \d{6}.*$, ), -- 先移除邮编和姓名部分 ([省市县区]), \1 -- 在省、市、县、区后面加一个空格使其更清晰此操作需谨慎可能误伤 ) AS 重构的地址 FROM address_table;这个例子略显生硬但它说明了思路通过嵌套使用REGEXP_REPLACE可以一步步将杂乱文本塑造成目标格式。对于复杂的解析任务通常建议结合多个正则函数SUBSTRING、REGEXP_SUBSTR、REGEXP_MATCHES以及CASE WHEN语句来完成REGEXP_REPLACE是其中负责“替换”和“移除”环节的利器。4. 性能陷阱与高级优化策略正则表达式功能强大但滥用或编写低效的模式会导致严重的性能问题尤其是在处理海量数据时。4.1 常见性能陷阱过度使用通配符.*或.*?尤其是开头的.*会导致大量的回溯backtracking。例如.*.*\.com匹配一个邮箱引擎会先贪婪地吃掉整个字符串然后发现后面没有再一点点“吐”出来回溯效率极低。应尽量使用更精确的字符集或限定符。嵌套的量词如(a)这种模式在匹配失败时会产生指数级的回溯可能导致“灾难性回溯”Catastrophic Backtracking使引擎挂起。在循环或频繁调用的查询中使用复杂正则如果要对一个百万行的表每一行都执行一个复杂的REGEXP_REPLACE成本会非常高。4.2 优化策略与替代方案尽量具体化模式用\d代替.匹配数字用[a-z]代替.匹配小写字母。使用限定符{n,m}代替*或如果长度已知。差SELECT ... WHERE REGEXP_REPLACE(column, .*.*, ) ...优SELECT ... WHERE REGEXP_REPLACE(column, \w\w\.\w, ) ...(虽然仍不完美但更精确)使用更简单的字符串函数组合如果需求能用LEFT、RIGHT、SUBSTRING、POSITION、TRIM等基础函数解决绝对不要用正则。正则表达式是“重型武器”。示例去除字符串首尾的特定字符如括号。正则方案REGEXP_REPLACE(col, ^[\[\]]|[\[\]]$, , g)简单函数方案TRIM(BOTH [] FROM col)。后者性能远超前者。预编译或索引某些数据库如PostgreSQL支持为正则表达式创建索引使用pg_trgm扩展的GIN/GiST索引或者将常用的、不变的正则模式在应用层编译好再传入。在Hive/Spark中考虑能否在数据ETL的早期阶段就用UDF用户定义函数完成清洗避免在即席查询中频繁使用。分步处理物化中间结果对于极其复杂的清洗逻辑不要试图用一个REGEXP_REPLACE完成所有事情。可以写一个多步骤的CTE公用表表达式或临时表每一步只做一个简单的替换或提取并将结果物化到临时表中。这样代码更易读、易调试有时数据库优化器也能更好地处理。血泪教训我曾遇到一个生产查询因为一个包含‘.*(\d).*’的REGEXP_REPLACE在数亿条记录上运行导致整个查询超时。后来将其拆解为先使用SUBSTRING和POSITION判断是否有数字再进行处理性能提升了上百倍。记住正则表达式是“最后的武器”。5. 跨数据库方言的适配与调试技巧不同数据库的REGEXP_REPLACE实现有差异编写可移植的SQL或进行迁移时需要格外小心。5.1 方言差异对比特性PostgreSQL / RedshiftMySQL (8.0)OracleHive / Spark SQL函数名REGEXP_REPLACEREGEXP_REPLACEREGEXP_REPLACEREGEXP_REPLACE默认替换替换所有匹配项替换第一个匹配项替换所有匹配项替换第一个匹配项全局替换标志默认全局无特定g标志控制需使用g标志默认全局‘g’标志无效需使用g标志反向引用语法\1,\2, ...$1,$2, ...\1,\2, ...$1,$2, ... (Spark)常见标志i,g(POSIX),m,n,xi,c,m,n,ui,c,m,n,xi,g,m5.2 调试与验证技巧从小处着手不要直接对生产数据运行复杂的REGEXP_REPLACE。先用SELECT语句配合几个有代表性的样本数据包括边界情况、异常数据进行测试。使用REGEXP_MATCHES或REGEXP_SUBSTR辅助调试在不确定模式是否能匹配时先用REGEXP_MATCHES返回匹配的数组或REGEXP_SUBSTR返回匹配的子串看看引擎到底找到了什么。-- 在PostgreSQL中调试 SELECT REGEXP_MATCHES(abc123def456, \d, g); -- 返回 {123}, {456}逐步构建复杂模式对于复杂的正则表达式像搭积木一样一步步构建。先写核心部分测试通过后再添加边界条件、分组等。在线工具辅助利用诸如 regex101.com、regexr.com 等在线正则表达式测试工具。它们可以高亮显示匹配部分、解释模式含义并支持不同的正则风格PCRE、JavaScript等选择与你数据库最接近的。但务必注意在线工具的解释和数据库实现可能有细微差别最终测试必须在数据库环境中进行。REGEXP_REPLACE的掌握是一个从“知道怎么用”到“明白为什么这么用”再到“清楚什么时候不该用”的渐进过程。它不是你SQL工具箱里唯一的工具但绝对是处理文本“顽疾”时最锋利的那一把。开始时你可能会觉得语法晦涩但一旦你习惯了用模式的眼光去看待文本很多曾经令人头疼的清洗任务都会变得清晰而简单。真正的熟练体现在你能在功能、性能和代码可读性之间找到最佳平衡点。

相关新闻

<p>安阳街头巷尾,黄金铂金白银回收门店鳞次栉比,招牌林立间难免鱼龙混杂,市民想要甄别靠谱变现渠道着实需要火眼金睛。为帮街坊邻里避开套路、寻得安心,小编实地走访安阳多个商圈,逐一核验经营资质与交易口碑

<p>安阳街头巷尾,黄金铂金白银回收门店鳞次栉比,招牌林立间难免鱼龙混杂,市民想要甄别靠谱变现渠道着实需要火眼金睛。为帮街坊邻里避开套路、寻得安心,小编实地走访安阳多个商圈,逐一核验经营资质与交易口碑

鞍山这座重工业底蕴深厚的城市,街头巷尾的黄金铂金白银回收门店鳞次栉比,但其中鱼龙混杂,报价虚高、克扣成色、临时压价等套路屡见不鲜。为帮市民甄选靠谱变现渠道,小编实地走访、反复核验,筛选出本地优质诚信商户&…

2026/8/7 6:24:54 阅读更多 →
CentOS Stream 9部署OpenClaw自动化运维平台实战

CentOS Stream 9部署OpenClaw自动化运维平台实战

1. 项目概述:CentOS Stream 9与OpenClaw的相遇作为长期从事企业级应用部署的运维工程师,我最近在测试环境中完成了OpenClaw在CentOS Stream 9上的完整部署。OpenClaw(小龙虾)是近期备受关注的开源自动化运维平台,而Cen…

2026/8/5 22:40:54 阅读更多 →
LabVIEW多列列表框控件:从数据模型到交互实战的界面设计指南

LabVIEW多列列表框控件:从数据模型到交互实战的界面设计指南

1. 项目概述:为什么多列列表框是LabVIEW界面设计的“瑞士军刀”在LabVIEW的图形化编程世界里,前端界面(前面板)的设计直接决定了用户的操作体验和程序的直观性。做过几个项目后你会发现,很多数据展示的需求&#xff0c…

2026/8/6 13:53:26 阅读更多 →

最新新闻

MySQL REPLACE INTO 语句详解与批量更新优化

MySQL REPLACE INTO 语句详解与批量更新优化

1. REPLACE INTO 基础原理与语法解析 REPLACE INTO 是 MySQL 中一个特殊的 DML 语句,它的工作方式可以理解为"先删除后插入"的二合一操作。当执行 REPLACE INTO 时,MySQL 会首先尝试查找表中是否存在与主键或唯一索引冲突的记录。如果存在冲突…

2026/8/7 11:03:13 阅读更多 →
Kubernetes HPA自动扩缩容原理与实战配置指南

Kubernetes HPA自动扩缩容原理与实战配置指南

1. HPA自动扩缩容:云原生时代的资源管理利器 在容器化部署成为主流的今天,如何高效管理应用资源成为每个运维工程师的必修课。HPA(Horizontal Pod Autoscaler)作为Kubernetes的核心组件之一,能够根据实时负载动态调整P…

2026/8/7 11:03:13 阅读更多 →
Windows主机等保三级加固实战:从身份鉴别到入侵防范的完整指南

Windows主机等保三级加固实战:从身份鉴别到入侵防范的完整指南

1. 项目概述与核心价值 最近在帮几个客户做等保三级测评后的整改,发现Windows主机的加固是个重灾区。很多运维兄弟觉得,Windows嘛,图形化点点就行了,但实际上,等保三级对Windows主机的安全要求非常细致和深入&#xff…

2026/8/7 11:03:13 阅读更多 →
10分钟打造专业AI变声器:RVC WebUI终极指南

10分钟打造专业AI变声器:RVC WebUI终极指南

10分钟打造专业AI变声器&#xff1a;RVC WebUI终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI …

2026/8/7 11:03:13 阅读更多 →
PyTorch训练过程可视化:Matplotlib实战指南

PyTorch训练过程可视化:Matplotlib实战指南

1. 为什么我们需要训练过程可视化&#xff1f; 在深度学习模型训练过程中&#xff0c;我们常常会遇到这样的困惑&#xff1a;模型到底学得怎么样了&#xff1f;损失函数下降得合理吗&#xff1f;有没有过拟合&#xff1f;这些问题如果仅靠终端输出的数字日志&#xff0c;很难直…

2026/8/7 11:03:13 阅读更多 →
Linux网卡无IP问题排查与驱动兼容性解决方案

Linux网卡无IP问题排查与驱动兼容性解决方案

1. 问题现象与初步排查 那天早上刚到公司&#xff0c;发现测试服务器突然无法SSH连接了。登入物理机查看&#xff0c;执行 ifconfig 发现ens33网卡竟然没有分配IP地址&#xff0c;只有回环接口lo显示正常。作为负责维护几十台Linux服务器的运维&#xff0c;这种情况还是第一次…

2026/8/7 11:02:13 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案&#xff1a;完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上&#xff0c;享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select&#xff1a;打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手&#xff1a;NSZ压缩工具终极指南&#xff0c;轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →