解析器函数
#expr
这个函数计算数学表达式并返回计算值或者布尔结果。[1]
- 1(true)
- 0(false)
{{#expr: 表达式}} 完整的数学计算请参考MediaWiki计算 | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#expr: 1 and -1}},{{#expr: 1 and 0}},{{#expr: 2 and 3}} |
1,0,1 | 逻辑与,非0以外的数都是true(1),false(0) |
{{#expr: 1 or -1}},{{#expr: 1 or 0}},{{#expr: 2 or 3}} |
1,1,1 | 逻辑或,非0以外的数都是true(1),false(0) |
{{#expr: 1>2}},{{#expr: 1<=2}} |
0,1 | 逻辑判断大小,非0以外的数都是true(1),false(0) |
{{#expr: (1+1*8/2) mod 3}} |
2 | 混合运算 |
{{#expr: pi}},{{#expr: 1e3}} |
3.1415926535898,1000 | π,科学计数 |
{{#expr: sin30}},{{#expr: sin(30*pi/180)}} |
-0.98803162409286,0.5 | 正弦 |
{{#expr: 1/3 round 5}},{{#expr: 1/6 round 5}} |
0.33333,0.16667 | round取整,最后的小数大于5会区6,否则使用原数 |
{{#expr: 1234.5678 round -2}},{{#expr: 1234.5678 round 2}} |
1200,1234.57 | -2往小数点左边取2位,正数往小数点右边取2位 |
{{#expr: {{NUMBEROFUSERS}}}},{{#expr: {{NUMBEROFUSERS}}+5}} |
7,12 | 配合魔术字 |
{{#expr: 45,000 + 100}} {{#expr: 2 =}} |
表达式错误:无法识别的符号“,”。 表达式错误:缺少=的操作数。 |
错误使用会出现提示信息 |
#ifexpr
此函数会判断数学表达式并根据其布尔值结果返回对应的字符串。[1]
{{#ifexpr: expression | value if true | value if false }} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#ifexpr: {{#expr: 2 > 1}} | yes | no }} {{#ifexpr: 2 > 1 | yes | no }} |
yes yes |
|
{{#ifexpr: {{#expr: 2+1*8 }} | yes | no }} {{#ifexpr: 2+1*8 | yes | no }} |
yes yes |
|
{{#ifexpr: | yes | no }} {{#ifexpr: 0 | yes | no }} {{#ifexpr: 1 | yes | no }} |
no no yes |
#if
这个函数判断一个字符串是否为空。只包含空格的字符串被视为空字符串。[1]
{{#if: 测试字符串 | 试字符串非空时的取值 | 测试字符串为空或仅包含空白字符时的取值 }} {{#if: 参数1 | 参数2 | 参数3 }} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#if:| yes |no}} |
no | 空值 |
{{#if: |yes |no}} |
no | 参数输入的是空格 |
{{#if: |yes|no}} |
no | 参数输入的是空格,回车等 |
{{#if:isl| yes |no}} |
yes | |
{{#if: 1==2 | yes | no }} |
yes | |
{{#if: 0 |yes | no }} |
yes | 参数1都是当字符串处理 |
{{#if: isl | yes }} |
yes | 最后一个参数可以忽略 |
{{#if: | | no }} |
no | |
{{#if:{{#if:isl|yes|no}}|里面返回字符串|里面返回空}} |
里面返回字符串 | 嵌套使用 |
{{#if:{{#if:isl| |no}}|里面返回字符串|里面返回空}} |
里面返回空 | 嵌套使用 |
#ifeq
这个函数判断两个输入字符串是否相同,并根据结果输出两个字符串的其中一个。 如果需要更多的比较和输出字符串,请考虑使用#switch。[1]
{{#ifeq: 字符串1 | 字符串2 | 两个字符串相等 | 不相等 }} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#ifeq: 01 | 1 | 相等 | 不相等 }} |
相等 | 如果两个参数都是数字,进行数字比较 |
{{#ifeq: 0 | -0 | 相等 | 不相等 }} |
相等 | 如果两个参数都是数字,进行数字比较 |
{{#ifeq: 1e3 | 1000 | 相等 | 不相等 }} |
相等 | |
{{#ifeq: {{#expr:10^3}}| 1000 | 相等 | 不相等 }} |
相等 | |
{{#ifeq: "01" | "1" | 相等 | 不相等 }} |
不相等 | |
{{#ifeq: 真的 | 假的 | 相等 | 不相等 }} |
不相等 | |
{{#ifeq: Abc | abc |相等| 不相等 }} |
不相等 | |
{{#ifeq: 10^3 | 1000 | 相等 | 不相等 }} |
不相等 | |
{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | 相等 | 不相等}} |
不相等 | 每个标签在解析的时候回自动添加相关的独立标记 |
其他的比较如解析器函数,模板 |
#iferror
这个函数接收一个输入字符串,返回两个结果中的一个。如果输入字符串包含一个由其他解析器函数(比如#expr、#time和#rel2abs)、模板错误(比如模板循环和模板递归)或其他解析器“软错误”生成的class="error"
的HTML对象,那么视为真。[1]
{{#iferror: test string | value if error | value if correct }} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#iferror: {{#expr: 1 + 2 }} | 用法错误 | 用法正确 }} {{#iferror: {{#expr: 1 + 2 }} | 用法错误 }} |
用法正确 3 |
|
{{#iferror: {{#expr: 2 =}} | 用法错误 | 用法正确 }} |
用法错误 | |
{{#iferror: <strong class="error">a</strong> | 标签带error | 标签不带error }} |
标签带error | |
{{#iferror: {{#expr: 2 =}} | 解析结果带error | 解析结果带不带error }} |
解析结果带error |
#rel2abs
这个函数将文件的相对路径转换为绝对路径。[1]
.
本级目录../
上级目录/标题
下级目录
{{#rel2abs: path }} {{#rel2abs: path | base path }} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#rel2abs: {{PAGENAME}} |模板:a/b/c }} {{#rel2abs: {{PAGENAME}}}} |
解析器函数 解析器函数 |
|
{{#rel2abs: ./{{PAGENAME}} |模板:a/b/c }} {{#rel2abs: /{{PAGENAME}} |模板:a/b/c }} |
模板:a/b/c/解析器函数 模板:a/b/c/解析器函数 |
./和/是一样的 |
{{#rel2abs: ../{{PAGENAME}} |模板:a/b/c }} {{#rel2abs: ../../{{PAGENAME}} |模板:a/b/c }} {{#rel2abs: ../../../{{PAGENAME}} |模板:a/b/c }} |
模板:a/b/解析器函数 模板:a/解析器函数 解析器函数 |
|
{{#rel2abs: ../../ |模板:a/b/c }} {{#rel2abs: .././ |模板:a/b/c }} {{#rel2abs: .././../ |模板:a/b/c }} |
模板:a 模板:a/b 模板:a |
|
{{#rel2abs: ../../ |模板:a/b/c }} {{#rel2abs: ../../../ |模板:a/b/c }} {{#rel2abs: ../../../../ |模板:a/b/c }} |
模板:a 错误:无效路径深度:“模板:a/b/c/../../../..”(尝试访问根节点以上节点) |
#ifexist
这个函数将一组字符串作为输入,并翻译成页面标题,然后根据在本地wiki上是否存在该页面而返回对应的值。[1]尽量少用。
被视为“高开销(expensive)解析器函数”,每个页面调用这类函数的次数(包括包含于嵌入式模板的函数)存在一个限制。
{{#ifexist: 页面名称 | 页面存在结果 | 页面不存在结果 }} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#ifexist: 模板:我的模板 | 页面存在 | 页面不存在 }} |
页面不存在 | |
{{#ifexist: File:MediaWiki.png | 文件存在 | 文件不存在 }} |
文件存在 | |
{{#ifexist: Mediawiki:common.css | 页面存在 | 页面存在 }} |
文件存在 | 只要是标题都可以 |
#switch
该函数将一个输入值同若干个测试用例(test cases)做比较,如果找到匹配,返回有关联的字符串。[1]
语法:
{{#switch: comparison string | case = result | case = result | ... | case = result | default result }}
默认值
示例 | 输出结果 | 备注 |
---|---|---|
{{#switch: 1 | 1 = 为1 | 2 = 为2 | 其他值 }} {{#switch: 3 | 1 = 为1 | 2 = 为2 | 其他值 }} |
为1 其他值 |
默认值通常写在最后 |
{{#switch: 1 | 1 = 为1 | #default = 其他值 | 2 = 为2 }} |
其他值 | 使用#default 可以出现在任意位置
|
{{#switch: 1 | 1 = 为1 | 2 = 为2 }} |
不写默认值不返回结果 |
分组
示例 | 输出结果 | 备注 |
---|---|---|
{{#switch: 2 | 1 | 2 | 3 = 小于等于3 | 4 | 5 | 6 = 大于3,小于7 | 不在区间范围,请输入1-6 }} |
小于等于3 | 1,2,3为一组,4,5,6为一组 |
比较
若被比较字符串和测试用例字符串都是数字,那么按照数值进行比较;反之若存在一个非纯数字符串,都会按照字符串比较规则进行。[1]
示例 | 输出结果 | 备注 |
---|---|---|
{{#switch: | = Nothing | 3 = 结果为3 | 其他值 }} |
Nothing | 可以为空 |
{{#switch: 1+2 | 2 = 结果为2 | 3 = 结果为3 | 其他值 }} |
其他值 | 作为字符串“1+2” |
{{#switch: {{#expr:1+2}} | 2 = 结果为2 | 3 = 结果为3 | 其他值 }} |
结果为3 | 计算后再比较 |
等号
示例 | 输出结果 | 备注 |
---|---|---|
{{#switch: 1=2 | 1=2 = raw | 1{{=}}2 = template | default }} |
template | 使用模板将“=”号包含 |
{{#switch: 1=2 | 1=2 = html | default }} |
html | 使用HTML标识码=
|
使用参数
一般是用在模板里。
{{#switch: {{{1}}} | 1 = 为1 | 2 = 为2 | 其他值 }}
和#ifeq的转换
{{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}
等效于
{{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}
比如:
{{#switch:abc |Abc = 输入为Abc |abc = 输入为abc |输入未知 }} 等价于: {{#ifeq: abc | Abc | 输入为Abc | {{#ifeq: abc | abc | 输入为abc | 输入未知 }} }}
#time
该解析器函数接收一个(公历的)日期或者时间,并根据给定的语法将其格式化。可以指定日期/时间对象,页面最后被渲染为HTML时的时间。[1]更加详细的参考官网#time。
- {{#time: format string }}
- {{#time: format string | date/time object }}
- {{#time: format string | date/time object | language code }}
- {{#time: format string | date/time object | language code | local }}
- date/time object是使用的PHP函数strtotime的日期格式
示例 | 输出结果 | 备注 |
---|---|---|
{{#time: Y-m-d }} |
2023-03-22 |
|
{{#time: y年m月d日 H:i:s }} |
23年03月22日 20:13:26 | |
{{#time: y年m月d日 H:i:s |+8 hours}} |
23年03月23日 04:13:26 | |
{{#time: Y年的第W周,第z天}} |
2023年的第12周,第80天 |
#timel
该函数等价于...,其中local参数设置为true,因此总是使用wiki的本地时间。[1]更加详细的参考官网#time。
- {{#timel: format string }}
- {{#timel: format string | date/time object }}
- {{#timel: format string | date/time object | language code }}
- date/time object是使用的PHP函数strtotime的日期格式
示例 | 输出结果 | 备注 |
---|---|---|
{{#timel: Y-m-d }} |
2023-03-23 | 其他语法同#time |
{{#timel: y年m月d日 h:i:s }} |
23年03月23日 04:13:26 | |
{{#timel: y年m月d日 H:i:s}} |
23年03月23日 04:13:26 | |
{{#timel: Y年的第W周,第z天}} |
2023年的第12周,第81天 |
#titleparts
此函数将页面标题根据斜杠划分成多个分段,然后输出返回这些分段中的部分。[1]
{{#titleparts: 页面名称 | 需要返回的分段数量 | 要返回的第一个分段 }}需要返回的分段数量 默认为0要返回的第一个分段 未指定或者是0则默认为1
| ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#titleparts: a/b/c/d/e }} |
A/b/c/d/e | 返回的首字母有大写 |
{{#titleparts: a/b/c/d/e|0|2 }} |
b/c/d/e | 返回的首字母没有大写 |
{{#titleparts: a/b/c/d/e | 2 | 2 }} |
b/c | |
{{#titleparts: a/b/c/d/e | | 2 }} |
b/c/d/e | |
{{#titleparts: a/b/c/d/e | -1 }} |
A/b/c/d | 从字符串的末尾剥离1段 |
{{#titleparts: a/b/c/d/e | -2 }} |
A | 从字符串的末尾剥离4段 |
{{#titleparts: a/b/c/d/e | -1 | 2 }} |
b/c/d | 从字符串的末尾剥离一段,然后返回第二段及以后的段 |
{{#titleparts:a/b/c/d/e | -1 | -2 }} |
-1 | -2 }} | 从倒数第二个元素开始复制;从字符串的末尾剥离一段 |
字符串函数
#len
#len
函数返回指定字符串的长度。[1]
{{#len:string}} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#len:abcedefg}} |
8 | |
{{#len:中文}} |
2 | 一个文字算作1 |
{{#len: a b }} |
5 | ab之间有3个空格,前后的空格不计算 |
{{#len:<nowiki>This is a </nowiki>test}} |
4 | nowiki标签之间的都为0 |
{{#len: }} |
6 | HTML字符这种直接计算,例子中为空格 |
#pos
#pos
函数返回给定搜索词在字符串中的位置。 [1]
{{#pos:string|搜索词|offset}} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#pos:I am good.|good}} |
5 | 从0开始数,I是0 |
{{#pos:I am good.|good|6}} |
没找到就返回空 | |
{{#pos:I am good.|o}} |
6 | 只返回一个 |
{{#pos:I am good.| o | 7}} |
7 | 跳过第一个o |
#rpos
#rpos
函数返回给定搜索词在字符串中的最后的位置。 [1]
{{#rpos:string|搜索词}} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#rpos:I am good.| o }} |
7 | 仅返回后面的一个o |
{{#rpos:I am good.| z }} |
-1 | 没找到返回-1 |
#sub
#sub
函数返回指定字符串中的子字符串(substring)。 [1]
正向数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
负向数 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
字符串 | I | a | m | g | o | o | d | . |
{{#sub:string|start|length}}
| ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#sub:I am good.|2|2}} |
am | “am good.”,取2个字符 |
{{#sub:I am good.|4|-2}} |
goo | “ good.”,-2就是忽略掉“d.”,这里注意空格被删掉了 |
{{#sub:I am good.|5|-2}} |
goo | “good.”,-2就是忽略掉“d.”,跟上面一样 |
{{#sub:I am good.|-3|2 }} |
od | “od.”,2正向取od |
{{#sub:I am good.|-3|-1 }} |
od | “od.”,-1忽略掉“.”,取od,结果同上 |
{{#sub:I am good.|5|-6 }} |
超过返回空 | |
{{#sub:<nowiki>This is a <nowiki>test|1}}</code> |
est | 存疑 |
#count
#count
函数返回指定子字符串在提供的文本中出现的次数。 [1]
{{#count:string|substring}} | ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#count:I am good.|am}} |
1 | |
{{#count:I am good.|ama}} |
0 |
#replace
#replace
函数返回指定的字符串,并将所有搜索词出现的地方替换成替换词。 [1]
{{#replace:string|search term|replacement term}}
| ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#replace:I am good.|am | was}} |
I was good. | |
{{#replace:I am good.|o|O }} |
I am gOOd. | |
{{#replace:I am good.||X }} |
IXamXgood. | 未指定要搜索的子串 |
{{#replace:I am good.|am| }} |
I good. | 未指定要替换的内容 |
#explode
#explode
函数将指定的字符串分成多个片段,返回其中一段。 [1]
{{#explode:string|delimiter|position|limit}}
| ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#explode:I am good.| am | 1}} |
good. | 可以是多个字符 |
{{#explode:I am good.| am | 3}} |
超过了返回空 | |
{{#explode:a/b/c/d |/|2 }} |
c | 可以是单个字符 |
{{#explode:a/b/c/d |/|-1 }} |
d | 负数倒着取,从1开始 |
{{#explode:1oo234 |o|1 }} |
两个相邻的delimiter,则中间取空格0(1),1( ),2(234) | |
{{#explode:1oo234 |o|2}} |
234 | 两个相邻的delimiter,则中间取空格0(1),1( ),2(234) |
#urldecode
#urldecode
函数将“URL编码”的转义字符转换回原来的可读字符。 [1]
{{#urldecode:URL值}}
| ||
示例 | 输出结果 | 备注 |
---|---|---|
{{#urldecode:https://zh.wikipedia.org/wiki/%E7%99%BE%E5%88%86%E5%8F%B7%E7%BC%96%E7%A0%81}} |
https://zh.wikipedia.org/wiki/百分号编码 | 转义 |