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

帮助:解析函数/count

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

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

count

统计指定字符串在文本中出现的次数。出自扩展 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.”

对于复杂字符串处理,建议使用Lua模块以获得更高性能和可维护性。

语法

{{#count: 文本 | 目标 }}
  • 文本:要搜索的字符串。
  • 目标:要统计的子字符串。如果留空,则默认为单个空格。

返回值是一个整数,表示目标字符串在文本中的出现次数。

示例

  • {{#count:aa bb cc dd aa cc dd|aa}} → 2
  • {{#count:aa bb cc dd dd}} → 4 (默认统计空格数量)

底层代码

/**
 * {{#count: string | substr }}
 *
 * Returns number of occurrences of "substr" in "string".
 *
 * Note: If "substr" is empty, a single space is used.
 *
 * @param Parser $parser
 * @param string $inStr
 * @param string $inSubStr
 * @return int|string
 */
public static function runCount( Parser $parser, $inStr = '', $inSubStr = '' ) {
	$inStr = $parser->killMarkers( (string)$inStr );
	$inSubStr = $parser->killMarkers( (string)$inSubStr );

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

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

	$result = mb_substr_count( $inStr, $inSubStr );

	return $result;
}
代码逻辑:
  • 预处理参数,清理解析标记
  • 如果目标字符串为空,使用默认值空格
  • 使用 PHP 的 mb_substr_count 统计出现次数

实际用例

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