帮助:解析函数
若您想了解本站所有可用解析函数,推荐前往页面及其他wiki站点查看。
基本格式及通用注意事项
解析函数的格式如下:
{{#函数名: 参数1 | 参数2 | ... | 参数n }}
在页面中写上如此一般的代码后,后台解析页面就会呼叫解析函数“函数名”,并传入相应的参数。如果输入的参数内同样的含有函数(或模板等需要展开运算的代码),解析器将会先运算和展开参数里的代码。这种先后次序与数学公式中的括号是同等效果,由内至外逐一展开运算。
解析函数存在几个重要特性:
- 解析函数的第一个参数(即格式中的“参数1”,后均使用“参数1”说法)必定会自动被展开,即使使用了前述的方法,最多也只能防止参数2及以后的参数被展开。另外在参数1的内容中使用<nowiki></nowiki>通常都会引致非预期的效果,应尽量避免。
- 解析函数所有参数都必定会自动被修剪(trim,去掉头尾的空白字符,例如半形空格和换行),如果需要输入纯空白字符的字串、或者需要输入由空白字符开始或结束的字串,则需要使用<nowiki></nowiki>包裹输入的内容。常见情况是输入分隔符参数时,需要输入“, ”的话,就必须写“<nowiki>, </nowiki>”,使用“ ”不会有你预期的效果。
- 不能直接使用管道符“|”,要么管道符存在于其他函数或模板中,否则必须使用“{{!}}”。
- 这样可以:
{{#arraymap: 1,2,3 | , | @ | [[DV-@ | @]] | / }}
→1/2/3
- 这样不可以:
{{#arraymap: 4,5,6 | , | @ | 参数@ | | }}
→参数4参数5参数6
(使用管道符作为输出分隔符,arraymap用法) - 这样才可以:
{{#arraymap: 4,5,6 | , | @ | 参数@ | {{!}} }}
→参数4|参数5|参数6
其他注意事项:
- 某些函数对“该参数的值为空白”及“缺少该参数”的理解会有差异,导致运算处理和最终输出出现差错,需要留意该函数有没有这种设定。
- 字符本身和对应的HTML实体(HTML Entity)不一定会受到一致的处理,甚至不会相互等于,需要留意函数是否会将输入解码或将输出编码。
- 如果函数突然出现不符合预期的输出,那很有可能是你忘记了对某些特殊字符转义。
- 参数内容的前后可以随意添加空格和换行,可以适当使用让排版更整齐易懂。
函数列表
A字头函数
arraydefine 用于定义一个新的数组,数组的内容可以用相关的函数获取。此函数会把原字串以分隔符分隔成数组,分隔符也可以是正则表达式。
格式:
{{#arraydefine: 数组名称 | 原字串 | 分隔符(默认“,”) | 选项(unique、sort和print) }}
说明:
- '原字串'应是一列由分隔符隔开的字串。
- 可以定义一个空数组。(见例子)
- 输出的数组是一个字串数组。
- 如果未指定,默认的分隔符是半角逗号
,
,分隔符可以是:1.一个字串(分隔符前后的空格会被忽略),或:2.一个正则表达式,如:/\s*,\s*/。 - 可以指定选项:unique,sort和print。
- “unique”表示输出元素值唯一,忽略其中的重复元素
- 可以通过“sort”设定输出的排序方式,可选的参数为“none”(不排序)、“desc”(降序排序)、“asce”(升序排序)、“asc”(升序排序)、“random”(随机排序)、“reverse”(反向排序)
- “print”为输出方式,例如“list”(无序列表)
- 如果分隔符没有被指定,选项会被忽略。
例子:
{{#arraydefine:a|red}}
→ 定义一个叫做a的只有1个元素的数组{{#arraydefine:b|orange,red ,yellow, yellow}}
→ 使用默认分隔符定义一个叫做b的有4个元素的数组{{#arraydefine:c}}
→ 定义一个叫做c的空数组{{#arraydefine:d|apple, pear; orange|/\s*[;,]\s*/}}
→ 使用正则表达式匹配分隔符定义一个叫做d的有3个元素的数组{{#arraydefine:e|orange,red ,yellow, yellow|,|unique,sort=desc, print=list}}
→ 用“,”作为分隔符,定义一个元素均是唯一的、以降序排列的数组,并以list形式打印它。
arrayindex 用于输出一个数组某个元素的值,依据元素的序号。
格式:
{{#arrayindex: 数组名称 | 序号 | 默认返回值 }}
说明:
- 无效的序号(如:非数字、界外值)会导致输出 空字串 或 默认返回值 。
- 序号是以0为基准的,第1个元素的序号是0。
- 在序号处输入负值,则会从后往前定位元素。(如:序号-1代表数组的最后一个元素)
- 当不存在数组,不存在该名称的数组,或者当返回值为空字串时,会输出'默认返回值'。
例子:
{{#arrayindex:a |2 }}
→ a数组的第3个元素{{#arrayindex:b |-1 }}
→ b数组的最后一个元素{{#arrayindex:c |foo |bad value }}
→ 因为序号无效,输出默认返回值
arraymap
用于按照一定格式输出一个字符串。
格式:
{{#arraymap:字符串|分割符|别称|输出格式|输出间隔符}}
说明:
- 别称可以是任意文本。
- 不填入分割符的情况下,字符串中的每个文本均为独立的分割后字符。
- 若输出格式中不包含别称,则输出结果会重复“字符串被分割符分隔后的串数”次。
例子:
{{#arraymap:1,2||a|bab}}
→ b1b, b,b, b2b → 不填入分割符,将每个字符均带入至别称中{{#arraymap:1,2,3,4|,|a|ab}}
→ 1b, 2b, 3b, 4b → 直接输出,没有输出间隔符{{#arraymap:1,2|,|a|ab|,}}
→ 1b,2b → 使用“,”分隔输出后的结果
ask
用于SMW查询符合特定条件的结果并输出。
目前需要施工,暂无信息
C字头函数
css 用于输入页额外CSS样式内容。
格式:
{{#css:需要输入的css样式}}
说明:
- 最后一个元素声明结束后,需要再次换行。
D字头函数
defaultsort 用于设定词条在分类中的默认排序键。
格式:
{{DEFAULTSORT: 排序键 | 选项(noerror或noreplace) }}
说明:
- 同一词条中,若多次使用该解析函数会报错,可以通过添加“noerror”选项防止。
- “noreplace”选项可防止多个排序键的覆盖。
- 添加分类时,
可覆写默认排序键。
E字头函数
explode 用于将字串分割,然后返回指定位置的段落。
格式:
{{#explode:字串 | 分割符 | 位置}}
说明:
- 此解析函数区分大小写,请注意检定字串/分割符的大小写是否一致。
- 若位置为正数,则首项为0,若位置为负数,则输出首项为分割后字串的末项。
- 分割符默认为空格。
- 使用特殊字串时,需要使用<nowiki></nowiki>包裹。
例子:
{{#explode:0 1 2 3||0}}
→ 0 →不输入分割符,输出第0项{{#explode:0,1,2,3|,|-1}}
→ 3 → 输入分割符,输出倒数第1项{{#explode:0,1,2,3,,|,|-3}}
→ 3 → 字串中存在连续分割符,使用倒数位置{{#explode:0 ,1 , 2 , 3, 4|,|3}}
→ 3
expr
类型 | 运算符 |
---|---|
组合(括号) | ( )
|
数字 | 1234.5 、 e (2.718) 、 pi (3.142)
|
科学计数法(二元) e 、 正负号(一元) + ,-
| |
一元运算符 | not ceil trunc floor abs exp ln sin cos tan acos asin atan
|
二元运算符 | ^
|
* / div mod
| |
+ -
| |
四舍五入 | round
|
逻辑运算符 | = != <> > < >= <=
|
and
| |
or
|
用于验证一个数学表达式,并返回结果。
格式:
{{#expr: 表达式 }}
说明:
- 右侧表格为支持的运算符号,越上面的计算符计算优先度越高,越先被计算。
- 各个计算符的功能可以自行查询。
- 计算精度及格式取决于服务器操作系统及网站语言的数字格式。
- 用于计算布尔代数值时,所有非0数均为true,否则为false。
- 若使用表达式中存在使用魔术字输出的数字,请提前确认魔术字输出结果格式。例如{{PAGESIZE:{{FULLPAGENAME}}}}魔术字输出的格式为11,726,此时需要使用其他解析函数更改输出格式
例子:
{{#expr: 1 and -1}}
→ 1{{#expr: -1 and 0}}
→ 0{{#expr: 0 or -1}}
→ 1{{#expr: -1 or 1}}
→ 1{{#expr: 0 or 0}}
→ 0{{#expr: }}
→ → 输入空表达式可以得到空结果,不属于错误表达式{{#expr: 1 > }}
→ 表达式错误:缺少>的操作数。{{#expr: 1 kill 1}}
→ 表达式错误:无法识别的词语“kill”。{{#expr: - 1 }}
→ -1 → 在数字前的-号和+号作为数字正负判断,不属于错误表达式