Help:解析器函数

解析器函数是MediaWiki扩展,由mw:Extension:ParserFunctions提供,包含多个解析函数解释器。本扩展的典型语法是:

{{#函数名:参数1|参数2|参数3|...}}

目前有预定义的函数exprififeqifexprswitchrand暂时不用)。

各函数名都不分大小写。

忽略语句的空格、换行等空白字符。

函数

编辑

expr函数,计算数学表达式。语法为:

{{#expr:表达式}}

表达式用到以下运算符:

运算符 名称 优先级 元数 结合性 样例
+ 9 1 {{#expr:+ 7}} = 7
- 9 1 {{#expr:- 7}} = -7
not 逻辑非 9 1 {{#expr:not 7}} = 0
* 8 2 {{#expr:30 * 7}} = 210
/ 8 2 {{#expr:30 / 7}} = 4.2857142857143
div 8 2 {{#expr:30 div 7}} = 4.2857142857143
mod 8 2 {{#expr:30 mod 7}} = 2
+ 6 2 {{#expr:30 + 7}} = 37
- 6 2 {{#expr:30 - 7}} = 23
round 四舍五入(最大9) 5 2 {{#expr:30 / 7 round 7}} = 4.2857143
= 等于 4 2 {{#expr:30 = 7}} = 0
< 小于 4 2 {{#expr:30 < 7}} = 0
> 大于 4 2 {{#expr:30 > 7}} = 1
<= 小于等于 4 2 {{#expr:30 <= 7}} = 0
>= 大于等于 4 2 {{#expr:30 >= 7}} = 1
<> 不等于 4 2 {{#expr:30 <> 7}} = 1
!= 不等于 4 2 {{#expr:30 != 7}} = 1
and 逻辑与 3 2 {{#expr:30 and 7}} = 1
or 逻辑或 2 2 {{#expr:30 or 7}} = 1

round运算对运算数正负,位数正负都有不同表现,参见下例。

逻辑运算符把假映射为0,把真映射为非0,且返回值只有0或1。

同一表达式中先计算高优先级运算。括号优先级高于一切。

if函数有if-then-else(如果、那么、否则)结构,和Excelif函数类似。语法是:

{{#if:判断字符串|那么字符串|否则字符串}}
{{#if:判断字符串|那么字符串}}

若“判断字符串”不是空字符串(忽略前导或后缀空格),则函数返回“那么字符串”;若“判断字符串”是空字符串,则返回“否则字符串”。“否则字符串”可省略而不会出错,但函数在“判断字符串”为空时便会返回空字符串。

if函数还可用在模板语法中检查有否使用某参数。若满足条件,可在调用此模板的页面中显示或不显示特定内容。

{{#if:{{{1|}}}|匿名参数1不为空时输出的结果|匿名参数1为空时输出的结果}}
{{#if:{{{xx|}}}{{{yy|}}}|xx或yy参数不为空时输出的结果|xx和yy参数都为空时输出的结果}}

ifeq比较两串字串,傳回比较结果。语法为:

{{#ifeq:字符串1|字符串2|相等时返回的字符串|不相等时返回的字符串}}

注意:两串空字串相等。

示例:

假设模板{{Ifeq test}}的内容是

{{#ifeq:{{{lang}}}|zh|我使用中文|I don't use Chinese}}

{{Ifeq test|lang=zh}}的结果是“我使用中文”;而{{Ifeq test|lang=en}}的结果是“I don't use Chinese”。

ifexist

编辑

ifexist根據指定名稱的頁面是否存在,返回兩參數中的一數。用法:

{{#ifexist:待測頁面標題|存在文字|不存在文字}}

注意不能跨维基使用。

ifexist是高开销方法,如果超过调用次数限制,超出限制的部分默认为输出不存在时的内容。

示例:

首先,我们已知test页面不存在,User:用户名不存在,维基百科页面存在,英文维基百科有页面en:Minecraft,维基词典有wikt:hello

  • {{#ifexist:test|有test頁面|無test頁面}}→無test頁面
  • {{#ifexist:User:用户名|該用戶頁存在|該用戶頁不存在}}→該用戶頁不存在
  • {{#ifexist:维基百科||}}
  • {{#ifexist:en:Minecraft|1|0}}→0
  • {{#ifexist:wikt:hello|1|0}}→0

ifexpr

编辑

ifexpr计算数学表达式,并根据计算结果返回字符串。

{{#ifexpr:表达式|表达式不为0的结果|表达式为0的结果}}

表达式语法与expr相同。

switch

编辑

switch将一值与多項预设值比较,若有匹配时则返回指定字符串,即双射。语法是:

{{#switch:比较值
|预设值一 = 结果一
|预设值二 = 结果二
|...
|预设值某 = 结果某
|#default = 缺省结果
}}

switch从左往右逐一尝试,直到出现匹配。函数傳回第一个匹配值对应的结果,而忽略后面的匹配值。如果没有匹配,函数傳回缺省结果。缺省结果是指#default=后面的内容。其中#default=在结果沒有等号时可以省略。如果缺省结果没有设置,函数傳回空串。

注意:“缺省结果”是最后一个没有等号的预设值或“#default”预设值对应的结果;如果期望把有“=”号的字串作为缺省结果,则必须采用“#default”预设值形式,如:

#default = <span style="color:red;">red</span>

switch也可用作满射(多对一,避免重复设置结果)。即某预设值后未设置结果,这样如果该预设值与比较值匹配,则函数返回第一个有结果的预设值的结果,如:

{{#switch:比较值
|预设值1
|预设值2
|预设值3 = 结果3
|缺省结果
}}

如果比较值与预设值1、预设值2或预设值3匹配,都将返回结果3。注意:“#default”后必须有“=”,但其他预设值可以使用“#default”的结果。

switch也可以与invoke搭配,来完成随机显示的功能,详见Help:隨機顯示

time是时间日期格式函数,语法为

{{#time:格式参数}}

或者

{{#time:格式参数|时间参数}}

如果时间参数未指定,就用条目转换为HTML的时间(值)。缓存問題,这与浏览条目的时间可能会高达1星期偏差,可能要人手更新,方法是加上action=purge参数访问页面。

格式参数是种格式字符,与在PHP的date中的用法相似。

下列格式代码与在PHP中的意义一样。所不同的是:如果時間未指定,则显示文章最后一次转换成HTML的时间。缓存問題,此时间和你浏览文章的时间可能有最长一星期的差别,有时可能要親自更新数据,方法是编辑文章但不修改任何內容即保存。

以下格式代码和PHP函数date()同义。除了国际化(主要是语言)差别以外,所有和PHP的不同点都应报告为软件错误。其中所有的数字输出都会替换成当地语言的时间格式,可以使用xn(见下文)恢复成显示原来的数字。

代码 描述 输出(示例)
d 一个月第n天,不足两位补0 04
D 星期缩写,通常不国际化
j 一个月第n天,不足两位不补0 3
l 星期全称,通常不国际化 星期二
F 月份全称,通常需要国际化 12月
m 数字表示的月份,不足两位补0 01-12
M 月份缩写,通常需要国际化 12月
n 数字表示的月份,不足两位不补0 1-12
Y 四位年份 2024
y 二位年份 24
H 小时,不足两位补0 00-23
i 分钟,不足两位补0 00-59
s 秒,不足两位补0 00-59

以下代码是对PHP的扩展:

代码 描述
xn 将接下来的数字代码恢复成ASCII中的阿拉伯数字,如印地语{{#time:H, xnH}}输出“०६, 06”。
xr 将接下来的数字代码显示成罗马数字。
xg 输出月份名字的属格,只针对那些区分主格和属格的语言。
xx 输出“x”。

其他字符都不处理直接输出。你也可以用引号来输出未处理字串。

  • 引号中的字符直接输出(但不输出引号),没有配对的引号也直接输出,如
    • {{#time:"现在是"F}}→现在是12月
    • {{#time:i's"}}→31'43"
    • {{#time:Y-m-d"T"H:i:s"Z"}}→2024-12-24T08:31:43Z(ISO 8601
  • 像PHP的date()函数一样的反斜杠转义也是支持的。\H直接输出H\"直接输出"

未来可能会增加更多格式代码,可能是完善PHP現有功能,也可能是增加新功能。

时间参数格式参照PHP的strtotime()函数。它同时支持相对时间,如「+10 hours」,用来表示时区转换。更多信息参见the GNU tar manual[失效連結]

下表以國際協調时2024年12月24日(星期二)08時31分43秒(東八區時間2024年12月24日(星期二)16時31分43秒)为例说明各格式参数的作用。

格式参数 说明 显示结果
A 显示AM或PM AM
a 显示am或pm am
c 显示长日期 2024-12-24T08:31:43+00:00
D 星期数,以一汉字显示
d 日期日数,有0补齐 24
FM 月份 12月
Gg 当前UTC时间小时数,1位或2位数 8
H 小时数,2位数(24小时制) 08
h 小时数,2位数 (12小时制) 08
i 分钟数,2位数 31
j 日数,2位数 24
L 日期星期数,1位数,星期日为1,星期六为7 1
l 日期星期数,3位汉字 星期二
m 月份数,2位数 12
N 星期数,星期一为1,星期日为7 2
n 月份数,1位或2位数 12
r 英文长日期格式 Tue, 24 Dec 2024 08:31:43 +0000
s 秒数 43
T UTC UTC
t 该月天数 31
U 時間序號,1970-1-1 0:0:1为1,參見UNIX時間 1735029103
W 日期周数,显示日期为当年第几周 52
w 星期数,星期日为0,星期六为6 2
Y 日期年份,4位数 2024
y 日期年份,2位数 24
z 显示日期为当年第几日 358

系统默认的时间参数为当前UTC+0时间,可以用{{#time:参数|+8 hours}}得到当前東八區时间。

时间参数可用绝对时间,如“2008-12-31 23:59:59”,也可用相对时间,如“+7 days”或者“-5 hours”得到默认时间7日之后或默认时间5小时之前的时间。也可以二者混合用,比如{{#time:Y-m-d H:i:s|2001-2-3 04:05:06 +1 year +2 months +3 days +4 hours +5 minutes +6 seconds}}傳回“2002-04-06 08:10:12”。

xr可以在其后显示罗马数字,如{{#time:xrY年xrm月xrd日|2008-12-31}}显示为“MMVIII年XII月XXXI日”。

生成與簽名格式相同的時間語法為{{#time:Y年n月j日 (D) H:i}} (UTC),顯示為「2024年12月24日 (二) 08:31 (UTC)」(亦可用參數T{{#time:Y年n月j日 (D) H:i (T)}})。

#timef提供更便捷的指定语言化的日期时间格式化输出。 例子:{{#timef: date/time object | format type | language code }}

  • date/time object:对应{{#timef|输出格式|时间对象}}的“时间对象”部分,如不指定,则为页面渲染时的当时时间。
  • format type :格式类型,枚举值,可选:
    • time:只输出时间
    • date:只输出日期
    • both:同时输出日期和时间,不指定时的默认值
    • pretty:以缩写方式只输出日期,不包括年份,部分语言没有这个格式,如果这样则等价于both
  • language code:指定对应语言的输出格式,不指定时默认为当前页面内容语言。

language

编辑

#language得到指定語言代碼的語言名(以当地语言表示)。

加入第二参数时,显示该语言在第二参数语言中的名称。

  • {{#babel:babelcode1|babelcode2|...}}

替换为{{babel}}模板,见Extension:Babel

invoke

编辑
  • {{#invoke:module|function|arg1|arg2|...}}

调用Scribunto中的模块,见维基百科:Lua

应用subst:到解析器函数,subst:和#之间沒有空格才可以正常工作。

表格

编辑

解析器函数用管道符|分隔参数,不能包括表格所需要的|符。要输出表格,可以:

  1. 用嵌套模板隐藏|,比如{{!}}
  2. 使用HTML语法。

参见

编辑
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy