如何移除wikitext中的wiki标签方括号标记保留正文内容
移除WikiText中特定wiki标记的实现方法
需求为清理WikiText中格式为[wiki=哈希ID]正文内容[/wiki]的专属标记,仅保留标签包裹的有效正文。
示例
- 原始标记文本
Mexico, officially the United Mexican States, is a [wiki=1c1ff8db21cf79377f9930e6e6ff8247]country[/wiki] in the southern portion of [wiki=5ffec2d87ab548202f8b549af380913a]North America[/wiki].
- 期望处理后文本
Mexico, officially the United Mexican States, is a country in the southern portion of North America.
原有方案问题
之前使用的正则preg_replace('/(\[.*?.\])/', '', $txt)无法实现需求,核心问题有两点:
- 匹配逻辑仅定位方括号内容直接删除,会把标签包裹的有效正文一并误删
- 匹配规则没有限定标签范围,容易出现跨标签越界匹配的问题,也未处理
[/wiki]闭合标签
可行实现方案
使用PHP正则捕获替换即可完成需求,代码如下:
// $txt为待处理的原始wikitext内容 $cleanText = preg_replace('/\[wiki=[^\]]+\](.*?)\[\/wiki\]/', '$1', $txt);
正则规则说明
\[wiki=[^\]]+\]:精准匹配开头的[wiki=ID]起始标签,[^\]]+表示匹配除右方括号外的所有字符,避免匹配范围越界(.*?):非贪婪模式匹配起始标签和闭合标签之间的正文内容,作为第一个捕获组保留\[\/wiki\]:匹配[/wiki]闭合标签- 替换值使用
$1,即仅保留捕获到的正文内容,自动剔除前后的wiki标记
内容的提问来源于stack exchange,提问作者XTRUST.ORG
相关产品推荐
相关产品推荐

