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

MediaWiki链接转换正则跨链接重叠匹配问题修复求助

MediaWiki Wiki链接格式替换正则修复方案

故障原因

原正则/\[\[(.*?) \((.*?)\)\|(.*?)]]/gm出现跨链接匹配错误的核心逻辑缺陷:

  • 模式中.*?非贪婪匹配默认匹配除换行外的任意字符,包含Wiki链接边界标记[[、]]
  • 非贪婪匹配仅保证匹配满足规则的最短字符串,但从第一个[[起始位置向后检索时,第一个符合「 (xxx)|xxx]]」结构的位置如果跨过相邻链接,正则会直接将中间的]] [[等内容吞入捕获组,造成跨链接的错误匹配。

修复后可用正则

/\[\[([^\[\]]+) \(([^\[\]]+)\)\|([^\[\]]+)]]/gm

修复说明

  • 将三个捕获组的匹配规则从.*?替换为[^\[\]]+,强制捕获组仅匹配不包含方括号的内容,从规则层面限制单个匹配项无法超出[[、]]包裹的单条Wiki链接边界,彻底避免相邻链接被错误合并。
  • 若业务场景中链接名、标识符内部允许出现方括号,可将捕获组替换为(?:(?!\[\[|]]).)+(通过负前瞻过滤链接边界标记);通用MediaWiki场景下[^\[\]]+性能更好,完全满足使用需求。

替换串

搭配以下替换串即可输出目标模板格式:

{{<template>|$1|$2}}

效果验证

使用提供的测试样例实测:
输入原文:

====[[<link #1>]] [[<link #2 name> (<link #2 identifier>)|<link #2 name>]]====
[[<link #3 name> (<link #3 identifier>)|<link #3 name>]]

替换后输出:

====[[<link #1>]] {{<template>|<link #2 name>|<link #2 identifier>}}====
{{<template>|<link #3 name>|<link #3 identifier>}}

不符合目标格式的第一个链接被完整保留,两个符合规则的链接被正确转换为模板调用,无跨匹配错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:27:16