Help:解析器函数

来自伪基百科
跳到导航 跳到搜索
Bouncywikilogo.gif
为了照顾那些上网成隐以至分不清虚拟及现实、认为维基百科大过天的脑残维基人维基管理员维基百科有一个主题关於:Help:解析器函数

解析器函数是由一个MediaWiki扩展mw:Extension:ParserFunctions提供,包含多个解析函数解释器。语法格式为:

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

函数名不分大小写,空格、回车等空白字符会被自动省略。

expr[编辑]

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

运算顺序遵循四则运算法则。对于判断语句若结果为假,则返回值为0,若结果为真,返回值为1。

请注意表达式的正确性。以下是几种错误的打开方式:

  • {{#expr: 2--------------------------------------------------------------------------------------------------------------1}} = 表达式错误:堆栈耗尽。
  • {{#expr: ( ) 1}} = 表达式错误:未预料的数字。
  • {{#expr: 2 plus 1}} = 表达式错误:无法识别的词语“plus”。
  • {{#expr: * 1}} = 表达式错误:未预料的*操作符。
  • {{#expr: -}} = 表达式错误:缺少-的操作数。
  • {{#expr: ( 1 ) )}} = 表达式错误:未预料的反括号。
  • {{#expr: 一加一}} = 表达式错误:无法识别的标点“一”。
  • {{#expr: ( 1}} = 表达式错误:未封闭的括号。
  • {{#expr: 1 / 0}} = 零除。

当一个字符串含有分隔符时,需要使用{{formatnum:{{{1}}}|R}}将其转换为数据。例如:

{{formatnum:1,000,000|R}}=1000000

if[编辑]

if函数是一个if-then-else结构。语法是:

{{#if: (判断字符串)| (then字符串) | (else字符串)}}

若判断字符串为非空字符串(忽略前导或后缀空格),则函数返回then字符串,否则函数返回else字符串。若else字符串未填,则判断字符串为空时返回空字符串。

范例:

  • {{#if:|是|否}} → 否
  • {{#if:字符串|是|否}} → 是
  • {{#if: |是|否}} → 否
  • {{#if: | 是 | 否}} → 否
  • {{#if: 1=2 | 是 | 否 }} → 是
  • {{#if: 0 | 是 | 否 }} → 是
  • {{#if:我是超威蓝猫!|是}} → 是
  • {{#if:|是}} →
  • {{#if:我是超威蓝猫!| |否}} →

ifeq[编辑]

ifeq比较两个字符串,返回比较结果。语法为:

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

若输入字符串均为数值或表达式,则先进行数学运算,若输入字符串为文本则直接进行比较。比较时无视空格及回车,大小写敏感,两个空字符串是相等的。

范例:

  • {{#ifeq:01|1|相等|不相等}} → 相等
  • {{#ifeq:0|-0|相等|不相等}} → 相等
  • {{#ifeq:1e3|1000|相等|不相等}} → 相等
  • {{#ifeq:{{#expr:10^3}}|1000|相等|不相等}} → 相等
  • {{#ifeq:番茄|西红柿|相等|不相等}} → 不相等
  • {{#ifeq:fuck|Fuck|相等|不相等}} → 不相等
  • {{#ifeq:"01"|"1"|相等|不相等}} → 不相等

ifexist[编辑]

ifexist根据指定名称的页面是否存在,返回两个参数中的一个。用法:

{{#ifexist:(待测页面标题) | (存在文字) | (不存在文字) }}

ifexpr[编辑]

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

{{#ifexpr: (表达式) | (then字符串) | (else字符串) }}

若表达式非空且经计算不为0,则函数返回then字符串,否则函数返回else字符串。表达式语法与expr相同。

范例:

  • {{#ifexpr:|是|否}} → 否
  • {{#ifexpr:=|是|否}} → 表达式错误:未预料的=操作符。
  • {{#ifexpr:1>0|是}} → 是
  • {{#ifexpr:1<0|是}} →
  • {{#ifexpr:0=0|是}} →
  • {{#ifexpr:1>0||否}} →
  • {{#ifexpr:1<0||否}} → 否
  • {{#ifexpr:1>0}} →

switch[编辑]

switch将一个值与多个预设值比较,若有匹配时则返回指定字符串,语法为:

{{#switch:(比较值)
 | (预设值1) = (结果1)
 | (预设值2) = (结果2)
 | ...
 | (预设值n) = (结果n)
 | #default = (缺省结果) 
 }}

switch将从左往右逐一比较,直到出现匹配为止,返回第一个匹配值对应的结果并结束。如果没有与之匹配的预设值,将返回最后一个缺省结果。如果没有缺省结果,将返回空字符串。

若某预设值为#default或在末尾且为空,则其对应的结果为缺省结果。若某预设值后的结果为空,则对应之后的第一个结果。

范例:

  • {{#switch:2|1=a|2=b|3}} → b
  • {{#switch:4|1=a|2=b|3}} → 3
  • {{#switch:test|1|2=a|3=b}} →
  • {{#switch:test|1=a|2=b|3=c}} →
  • {{#switch:test|1=a|#default=b|3=c}} → Bar
  • {{#switch:预设值6|预设值1=结果1|预设值2|预设值3|预设值4=结果2|预设值5=结果3|预设值6|预设值7=结果4|#default=缺省结果}} → 结果4
  • {{#switch:0+1|1=一|2=二|三}} → 三
  • {{#switch:{{#expr:0+1}}|1=一|2=二|三}} → 一
  • {{#switch:a|a=A|b=B|C}} → A
  • {{#switch:A|a=A|b=B|C}} → C
  • {{#switch:|=无|1=a|缺省结果}} → 无
  • {{#switch:2|1=a|2=b|2=c}} → b

time[编辑]

time是一个时间日期格式化函数,语法为:

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

如果时间参数未指定,则为该条目被加载的时间。注意这一时间往往不是现在的时间,因此你需要清除缓存

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

任何其他字符及引号中的字符(不包括引号)都将被直接输出。

下表以国际协调时间(UTC)2021年3月8日(星期一)07时17分08秒(北京时间2021年3月8日(星期一)15时17分08秒)为例说明各格式参数的作用。

格式参数 说明 显示结果
A 显示AM或PM AM
a 显示am或pm am
c 显示长日期 2021-03-08T07:17:08+00:00
D 星期数,以一个汉字显示
d 日期日数,有0补齐, 08
F或M 月份 3月
G或g 当前UTC时间小时数,1位或2位数字 7
H或h 小时数,2位数字 07
i 分钟数,2位数字 17
j 日数,2位数字 8
L 日期星期数,1位数字,星期日为1,星期六为7 0
l 日期星期数,3位汉字 星期一
m 月份数,2位数字 03
N 星期数,星期一为1,星期日为7 1
n 月份数,1位或2位数字 3
r 英文长日期格式 Mon, 08 Mar 2021 07:17:08 +0000
s 秒数 08
t 该月天数 31
U 时间序号,1970-1-1 0:0:1为1 1615187828
W 日期周数,显示日期为当年第几周 10
w 星期数,星期日为0,星期六为6 1
Y 日期年份,4位数字 2021
y 日期年份,2位数字 21
z 显示日期为当年第几日 66

系统默认的时间参数为当前UTC+0时间,可以使用{{#time:(参数)|+8 hours}}得到当前北京时间(UTC+8时间)。

时间参数可以使用绝对时间,如“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

参见[编辑]