帮助:解析函数/arraysearcharray
Arraysearcharray是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。
arraysearcharray
数组筛选。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从一个数组中筛选出匹配项并写入新数组。
支持正则表达式或“整段等值匹配”。可指定起始位置、最大匹配数;当使用正则时,可按捕获组对结果做格式化替换。
语法
{{#arraysearcharray: 新数组名 | 原数组名 | 搜索条件 | 起始索引 | 限制数量 | 转换规则 }}
参数:
- 新数组名:筛选结果将写入此数组
- 原数组名:要被筛选的数组
- 搜索条件:正则表达式或字符串,默认值
/^(\s*)$/
(匹配空白项) - 起始索引:默认
0
。从该位置起开始扫描 - 限制数量:默认不限制。空值或
-1
表示不限制 - 转换规则:可选,仅当搜索条件为正则时生效。写入结果前对匹配文本做替换,支持用
$1
、$2
… 引用捕获组(整段匹配可用$0
)
示例
定义数组:{{#arraydefine:a|apple, bule1, fly, add1,,,, wiki}}
,值为:apple、bule1、fly、add1、、、、wiki
说明 | 代码 | 结果 |
---|---|---|
筛选以 a 开头的值 | {{#arraysearcharray: x | a | /^a.+/ }}
|
apple、add1 |
以 a 开头,从第 2 项开始 | {{#arraysearcharray: x | a | /^a.+/ | 2 }}
|
add1 |
以 a 开头,仅取 1 个命中 | {{#arraysearcharray: x | a | /^a.+/ | 0 | 1 }}
|
apple |
匹配以数字结尾的元素 | {{#arraysearcharray: x | a | /^.*?(\d+)$/ }}
|
bule1、add1 |
匹配以数字结尾,重排格式 | {{#arraysearcharray: x | a | /^.*?(\d+)$/ | | | '''pre-$0''' }}
|
pre-bule1、pre-add1 |
删除空项(仅保留非空白) | {{#arraysearcharray: a | a | /\S+/ }}
|
apple、bule1、fly、add1、wiki |
底层代码
代码逻辑:
- 解析参数,包括原数组 ID、新数组 ID、搜索值、起始索引、限制数量和转换规则。
- 验证索引是否有效,获取原数组,并创建新数组。
- 对搜索值进行正则表达式验证,如果不是有效的正则表达式,则转换为匹配完整字符串的正则表达式。
- 遍历原数组,对每个值进行搜索匹配,如果找到匹配项,根据需要进行转换(基于PHP的preg_replace),并将匹配结果存入新数组中,直到达到限制数量或搜索完整个数组。
- 保存新数组。
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
- 模板:舰船解锁或120级总属性表 - 碧蓝航线
- 模板:舰队科技总属性表 - 碧蓝航线
- 模板:正则分割 - 三国杀
- 模板:技能来源/行 - 白荆回廊
- 模板:搜索公式 - 戴森球计划
- 模板:物品 - 戴森球计划
- 模板:相关公式 - 戴森球计划
- 模板:读取服装数据 - 克鲁赛德战记
- 模板:模板代码框 - 克鲁赛德战记
- 模板:取勇士的城镇对话 - 克鲁赛德战记
- 模板:取勇士翻译数据 - 克鲁赛德战记
- 模板:取勇士翻译数据按职业 - 克鲁赛德战记
- 模板:角色图鉴/突破 - 航海王:梦想指针
- 模板:特训 - 航海王:梦想指针
- 模板:特训/页 - 航海王:梦想指针
- 模板:主动 - 小小航海士
- 模板:兵种2 - 雾境序列
- 模板:共鸣 - 雾境序列
- 模板:共鸣2 - 雾境序列
- 模板:角色 - 雾境序列
- 模板:特性 - 雾境序列
- 模板:特性2 - 雾境序列