Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/pos

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

pos是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

pos

字符串搜索。出自扩展 ParserFunctions 的String functions大规模使用时性能低下,推荐使用Lua模块。请参考扩展置顶警告MediaWiki代码库 r51497中的暴论“parsers in the ugliest, most inefficient programming language known to man: MediaWiki wikitext with ParserFunctions.”、“WARNING: enabling this may have an adverse impact on the sanity of your users.”

返回指定字符串首次出现的位置,区分大小写。没有找到结果时返回空字符串。搜索时,无视字符串中的nowiki标签和其他解析器扩展标签。

语法

{{#pos: 字符串 | 搜索目标 | 偏移量 }}

  • 字符串:被搜索的内容,其中的nowiki标签和解析器扩展标签会被无视,即先移除后搜索。
  • 搜索目标:要在字符串中搜索的目标,默认空格
  • 偏移量(可选):指定搜索的起始位置,用于跳过若干字符

示例

  • {{#pos: Wins Come All Day | Come }} → 5
  • {{#pos: Wins Come All Day }} → 4 (查询目标默认为空格)
  • {{#pos: endless wins | e }} → 0
  • {{#pos: endless wins | e | 2 }} → 4
  • {{#pos: <a>赢</a>而不麻 | 麻 }} → 2 (扩展标签及其内容会被忽略)
  • {{#pos: 陈睿吃花椒 | 花椒 }} → 3

底层代码

来自MediaWiki及其扩展的源代码,运行在服务端。此处仅供快速查阅,便于更充分的挖掘其“特性”。

/** mediawiki-extensions-ParserFunctions-REL1_37\includes\ParserFunctions.php
 * {{#pos: string | needle | offset}}
 *
 * Finds first occurrence of "needle" in "string" starting at "offset".
 *
 * Note: If the needle is an empty string, single space is used instead.
 * Note: If the needle is not found, empty string is returned.
 * @param Parser $parser
 * @param string $inStr
 * @param int|string $inNeedle
 * @param int $inOffset
 * @return int|string
 */
public static function runPos( Parser $parser, $inStr = '', $inNeedle = '', $inOffset = 0 ) {
	$inStr = $parser->killMarkers( (string)$inStr );
	$inNeedle = $parser->killMarkers( (string)$inNeedle );

	if ( !self::checkLength( $inStr ) ||
		!self::checkLength( $inNeedle ) ) {
		return self::tooLongError();
	}

	if ( $inNeedle === '' ) {
		$inNeedle = ' ';
	}

	$pos = mb_strpos( $inStr, $inNeedle, min( (int)$inOffset, mb_strlen( $inStr ) ) );
	if ( $pos === false ) {
		$pos = '';
	}

	return $pos;
}
代码逻辑:
  • 移除输入字符串和查询目标中的解析标记(Strip marker
  • 如果输入参数长度超过限制,就报错
  • 查询目标默认值时空格
  • 在字符串中寻找查询目标,返回其位置。找不到时返回空字符串

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考
碧蓝航线 - blhx

原神 - ys

战双帕弥什 - zspms

明日方舟 - arknights

恋与深空 - lysk

崩坏:星穹铁道 - sr

赛马娘 - umamusume

第五人格 - dwrg

WIKI实验室 - tools

地下城堡2 - dxcb2

卡拉彼丘 - klbq

赛尔计划 - seerplan

绝区零 - zzz

公主连结 - pcr

奇迹暖暖 - qjnn

地下城堡3 - dxcb3

StardewValley星露谷物语 - stardewvalley

赛尔号星球大战 - seerwar

偶像荣耀/idoly pride - idolypride

深空之眼 - dhmmr

悠久之树 - yjzs

三国杀移动版 - msgs

天地劫 - tdj

食物语-档案馆 - swy

音乐世界Cytus II - cytus2

Starfield - starfield

赛尔号手游 - seerm

闪耀暖暖 - synn

Core Keeper地心护核者 - corekeeper

Break My Case - breakmycase

Unturned - unturned

异星工厂 - factorio

东方夜雀食堂 - tmi

航海王:梦想指针 - 3d2y