跳转到内容

模块:String/doc:修订间差异

来自TPC
Harry00025留言 | 贡献
无编辑摘要
Harry00025留言 | 贡献
无编辑摘要
第1行: 第1行:
'''由{{N|9}}汉化于MediaWiki Module:String/doc,删去了前言和配置手册,有更改。<br>若想查阅原文,请使用科学上网手段并访问 https://zh.wikipedia.org/wiki/Module:String 。'''
这个模块提供了基本的[[:Category:字符串算法|字符串操作]]函数。


本模块添加了简单的字符串函数。
此处提供的大多数函数都可以使用命名参数、未命名参数或混合参数调用。 如果使用命名参数,Mediawiki将自动从参数中删除任何前导或尾随空格。取决于预期用途,保留或删除此类空白各有优劣的。


== <code>len</code> ==
== 全局参数 ==
; <code>ignore_errors</code>
: 如果设置为“true”或“1”,则任何错误条件都将导致返回空字符串而不是错误消息。
; <code>error_category</code>
: 如果发生错误,则指定要包含在错误消息中的分类的名称。
; <code>no_category</code>
: 如果设置为“true”或 1,则在生成错误时不会添加任何类别。


此函数返回字符串的长度。
== len ==


范例:<code><nowiki>{{#invoke:String|len|目标字符串}}</nowiki></code>
此函数返回目标字符串的长度。


== <code>sub</code> ==
用法:


本函数返回目标函数的指定段落。请注意,首个字符的编号为'''1'''而非'''0'''。
: <code><nowiki>{{#invoke:</nowiki>String|len|''target_string''}}</code>


范例:<code><nowiki>{{#invoke:String|sub|目标字符串|起始位置|结束位置}}</nowiki></code>


* 起始位置和结束位置为数字。填入负数代表反向索引,例如-1代表字符串的最后一个字符。
: <code><nowiki>{{#invoke:</nowiki>String|len|s= ''target_string'' }}</code>


== <code>match</code> ==
参数:


本函数可以用于检查A字符串里是否含有B字符串。
; s
: 目标字符串


范例:<code><nowiki>{{#invoke:String|match|被索引字符串|索引字符串|起始位置|需要匹配次数|字符串类型|错误输出}}</nowiki></code>
示例:


<s>不知道为什么没有提供“结束位置”的选项设置</s>
* <code><nowiki>{{#invoke:String|len| abcdefghi }}</nowiki></code> → {{#invoke:String|len| abcdefghi }}
* <code><nowiki>{{#invoke:String|len|s= abcdefghi }}</nowiki></code> → {{#invoke:String|len|s= abcdefghi }}


* 如果被索引字符串里含有索引字符串,则返回索引字符串;若不含,则返回错误输出,若没有错误输出,则报错。
== sub ==
* ''需要匹配次数'':如果被索引字符串里需要含有指定次数次索引字符串,则返回索引字符串,若没有达到次数则返回错误输出,若没有错误输出,则报错。本项默认为'''1'''。
* ''字符串类型'':Boolean flag indicating that pattern should be understood as plain text and not as a Lua-style regular expression. Defaults to false.
* ''错误输出'':当函数报错时的输出,省去了使用<nowiki>{{#iferror}}</nowiki>的步骤。


== <code>pos</code> ==
: 此函数返回指定索引处目标字符串的子字符串。


本函数返回指定字符串里的指定位置的数据。
用法:


范例:<code><nowiki>{{#invoke:String|pos|目标字符串|位置}}</nowiki></code>
: <code><nowiki>{{#invoke:</nowiki>String|sub|''target_string''|''start_index''|''end_index''}}</code>


* 位置为数字。填入负数代表反向索引,例如-1代表字符串的最后一个字符。


== <code>find</code>==
: <code><nowiki>{{#invoke:</nowiki>String|sub|s= ''target_string'' |i= ''start_index'' |j= ''end_index'' }}</code>


本函数返回A字符串里包含的B字符串的位置。
参数:


范例:<code><nowiki>{{#invoke:String|find|被查找字符串|查找字符串|起始位置|字符串类型}}</nowiki></code>
; s
: 返回此字符串的子集
; i
: 要返回的子字符串的第一个索引,默认为1。
; j
: 要返回的字符串的最后一个索引,默认为最后一个字符。


<s>不知道为什么没有提供“结束位置”的选项设置</s>
字符串的第一个字符的索引为1。如果i或j是负值,则将其解析为通过从字符串末尾计数来选择字符。因此,值-1与选择字符串的最后一个字符相同。


* 如果被查找字符串里含有查找字符串,则返回被查找字符串里第一次查找到查找字符串的第一个字符的位置。如果没有,返回'''0'''。
如果请求的索引超出给定字符串的范围,则会报告错误。
* ''起始位置'':为数字,填入负数代表反向索引,例如-1代表字符串的最后一个字符。只能查找被查找字符串的指定起始位置(含)之后的位置,默认为'''1'''。
* ''字符串类型'':Boolean flag indicating that target should be understood as plain text and not as a Lua-style regular expression, defaults to true.


==<code>replace</code>==
示例:


本函数可以将A字符串内的B字符串替换为C字符串。
* <code><nowiki>"{{#invoke:String|sub| abcdefghi }}"</nowiki></code> → "{{#invoke:String|sub| abcdefghi }}"
* <code><nowiki>"{{#invoke:String|sub|s= abcdefghi }}"</nowiki></code> → "{{#invoke:String|sub|s= abcdefghi }}"
* <code><nowiki>"{{#invoke:String|sub| abcdefghi | 3 }}"</nowiki></code> → "{{#invoke:String|sub| abcdefghi | 3 }}"
* <code><nowiki>"{{#invoke:String|sub|s= abcdefghi |i= 3 }}"</nowiki></code> → "{{#invoke:String|sub|s= abcdefghi |i= 3 }}"
* <code><nowiki>"{{#invoke:String|sub| abcdefghi | 3 | 4 }}"</nowiki></code> → "{{#invoke:String|sub| abcdefghi | 3 | 4 }}"
* <code><nowiki>"{{#invoke:String|sub|s= abcdefghi |i= 3 |j= 4 }}"</nowiki></code> → "{{#invoke:String|sub|s= abcdefghi |i= 3 |j= 4 }}"


范例:<code><nowiki>{{#invoke:String|replace|A字符串|B字符串|C字符串|替换数量|字符串类型}}</nowiki></code>
== sublength ==


* A字符串:被替换的字符串。
此函数实现了<nowiki>{{Str sub old}}</nowiki>的功能,保留仅为维持旧的模板。
* B字符串:A字符串内被替换的文本。
* C字符串:替换A字符串内的B字符串的文本。
* 替换数量:从字符串头开始,替换指定次数,默认为'''all'''。
* 字符串类型:Boolean flag indicating that pattern should be understood as plain text and not as a Scribunto ustring pattern (a unicode-friendly Lua-style regular expression); defaults to true.


==<code>rep</code>==
用法:


本函数可以将指定字符串重复指定次数。
: <code><nowiki>{{#invoke:</nowiki>String|sublength|s= -{}-''目标字符串'' |i= ''开始索引'' |len= ''长度'' }}</code>


范例:<code><nowiki>{{#invoke:String|rep|指定字符串|重复次数}}</nowiki></code>
参数:
 
; s
: 字符串
; i
: 返回的子串的开始索引。第一个个字符的索引为0。
; len
: 返回的字符串的长度,默认为最后一个字符。
 
示例:
 
* <code><nowiki>{{#invoke:String|sublength|s= abcdefghi }}</nowiki></code> → {{#invoke:String|sublength|s= abcdefghi }}
* <code><nowiki>{{#invoke:String|sublength|s= abcdefghi |i= 3 }}</nowiki></code> → {{#invoke:String|sublength|s= abcdefghi |i= 3 }}
* <code><nowiki>{{#invoke:String|sublength|s= abcdefghi |i= 3 |len= 4 }}</nowiki></code> → {{#invoke:String|sublength|s= abcdefghi |i= 3 |len= 4 }}
 
== match ==
 
此函数从源字符串返回一个匹配指定模式的子字符串。
 
用法:
 
: <code><nowiki>{{#invoke:</nowiki>String-{}-|match|''源字符串''|''模式字符串''|''开始索引''|''匹配数量''|''纯标记''|''无匹配输出''}}</code>
 
或者
 
: <code><nowiki>{{#invoke:</nowiki>String|-{}-match|s= ''源字符串'' |pattern= ''模式字符串'' |start= ''开始索引''|match= ''匹配数量''|plain= ''纯标记'' |nomatch= ''无匹配输出'' }}</code>
 
参数:
 
; s
: 在这个字符串内搜索
; pattern
: 需要在字符串内搜索的模式或者字符串
; start
: 源字符串内的索引,从此索引开始搜索。字符串的第一个字符的索引为1。默认为1。
; match
: 在一些情况下,可能需要在单个字符串中进行多次匹配。此参数指定了返回哪一个匹配,其中第一个匹配就是match=1。如果指定了负数,那么返回的匹配从最后一个匹配开始数的。因此match=-1表达返回最后一个匹配。默认为1。
; plain
: pattern是否应该理解为纯字符串,而非正则表达式。默认为false。
; nomatch
: 如果没有找到匹配,返回nomatch的值,而不是一个错误。
 
如果match_number或start_index超出了查询的字符串的范围,此函数会产生错误。如果没有找到匹配,也会产生错误。
 
如果添加了参数ignore_errors=true,那么错误会被禁止,失败时返回的是一个空字符串。
 
匹配是Lua的一种正则表达式,更多信息可以参考:
 
* [[mw:Special:MyLanguage/Extension:Scribunto/Lua_reference_manual#Patterns|Scribunto patterns]]
* [[mw:Special:MyLanguage/Extension:Scribunto/Lua_reference_manual#Ustring_patterns|Scribunto Unicode string patterns]]
 
示例:
* <code><nowiki>{{#invoke:String|match| abc123def456 |%d+}}</nowiki></code> → {{#invoke:String|match| abc123def456 |%d+}}
* <code><nowiki>{{#invoke:String|match|s= abc123def456 |pattern= %d+ }}</nowiki></code> → {{#invoke:String|match|s= abc123def456 |pattern= %d+ }}
* <code><nowiki>{{#invoke:String|match| abc123def456 |%d+|6}}</nowiki></code> → {{#invoke:String|match| abc123def456 |%d+|6}}
* <code><nowiki>{{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 }}</nowiki></code> → {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 }}
* <code><nowiki>{{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 |match= 2 }}</nowiki></code> → {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 |match= 2 }}
* <code><nowiki>{{#invoke:String|match|s= abc123%d+ |pattern= %d+ }}</nowiki></code> → {{#invoke:String|match|s= abc123%d+ |pattern= %d+ }}
* <code><nowiki>{{#invoke:String|match|s= abc123%d+ |pattern= %d+ |plain= true }}</nowiki></code> → {{#invoke:String|match|s= abc123%d+ |pattern= %d+ |plain= true }}
* <code><nowiki>{{#invoke:String|match|s= abc |pattern= %d }}</nowiki></code> → {{#invoke:String|match|s= abc |pattern= %d |no_category=true}}
* <code><nowiki>{{#invoke:String|match|s= abc |pattern= %d |nomatch= No numeric characters in string }}</nowiki></code> → {{#invoke:String|match|s= abc |pattern= %d |nomatch= No numeric characters in string }}
* <code><nowiki>{{#invoke:String|match|s= abc |pattern= %d |ignore_errors= true }}</nowiki></code> → {{#invoke:String|match|s= abc |pattern= %d |ignore_errors= true }}
* <code><nowiki>{{#invoke:String|match|s= 0012001200 |pattern= 0*(%d*) }}</nowiki></code> → {{#invoke:String|match|s= 0012001200 |pattern= 0*(%d*) }}
 
== pos ==
 
返回在目标字符串中的位置pos处的单个字符。
 
用法:
 
: <code><nowiki>{{#invoke:</nowiki>String|pos|-{}-''目标字符串''|''索引值''}}</code>
 
 
: <code><nowiki>{{#invoke:</nowiki>String|pos|-{}-target= ''目标字符串'' |pos= ''索引值'' }}</code>
 
参数:
 
; 目标
: 在此字符串内搜索
; pos
: 需要返回的字符所在的索引。
 
第一个字符的索引值为1。
 
如果为负值,则此函数会从字符串的最后面开始倒数。也就是说,pos=-1相当于返回最后一个字符。
 
如果此值为0,或者超出了字符串的长度,则会返回错误。
 
示例:
 
* <code><nowiki>{{#invoke:String|pos| abcdefghi | 4 }}</nowiki></code> → {{#invoke:String|pos| abcdefghi | 4 }}
* <code><nowiki>{{#invoke:String|pos|target= abcdefghi |pos= 4 }}</nowiki></code> → {{#invoke:String|pos|target= abcdefghi |pos= 4 }}
 
== str_find ==
 
此函数与<nowiki>{{Str sub old}}</nowiki>的行为重复,包含了其所有的技巧,仅为支持存在的模板,但是对于新的代码和模板''不推荐''使用。新的代码建议直接使用find函数。
 
返回源字符串中匹配目的的第一个索引。索引是从1开始数的,如果源字符串中找不到目标字符串,则返回-1。
 
注意:如果目标字符串是空白或者缺失,则函数返回值为1,这可能不是预期的行为,必须要单独考虑。
 
用法:
 
: <code><nowiki>{{#invoke:</nowiki>String|str_find|-{}-''源字符串''|''目标字符串''}}</code>
 
 
: <code><nowiki>{{#invoke:</nowiki>String|str_find|source= ''源字符串'' |target= ''目标字符串'' }}</code>
 
参数:
 
; source
: 在此字符串内搜索
; target
: 在源内搜索的字符串
 
示例:
* <code><nowiki>{{#invoke:String|str_find| abc123def }}</nowiki></code> → {{#invoke:String|str_find| abc123def }}
* <code><nowiki>{{#invoke:String|str_find|source= abc123def }}</nowiki></code> → {{#invoke:String|str_find|source= abc123def }}
* <code><nowiki>{{#invoke:String|str_find| abc123def |123}}</nowiki></code> → {{#invoke:String|str_find| abc123def |123}}
* <code><nowiki>{{#invoke:String|str_find|source= abc123def |target= 123 }}</nowiki></code> → {{#invoke:String|str_find|source= abc123def |target= 123 }}
* <code><nowiki>{{#invoke:String|str_find| abc123def |not}}</nowiki></code> → {{#invoke:String|str_find| abc123def |not}}
 
== find ==
 
此函数在一个字符串内搜索另一个字符串。
 
用法:
 
: <code><nowiki>{{#invoke:</nowiki>String|find-{}-|''源字符串''|''目标字符串''|''开始索引''|''纯标记''}}</code>
 
 
: <code><nowiki>{{#invoke:</nowiki>String|find|-{}-source= ''源字符串'' |target= ''目标字符串'' |start= ''开始索引'' |plain= ''纯标记'' }}</code>
 
参数:
 
; source
: 在此字符串内搜索
; target
: 在源字符串内搜索的字符串
; start
: 在源字符串的此位置索引版主开始搜索。默认为1
; plain
: 布尔值标记,表示目的应该被理解为纯文本,而不是[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Ustring patterns|Scribunto ustring模式]],默认为true
 
此函数返回了在索引&gt;"start",其中"source"中可以持续到"target"。索引是从1开始数的。如果没有找到目标字符串,函数返回0。如果索引或者目的缺失或者是空的,此函数也会返回0。
 
此函数应该可以安全地操作UTF-8字符串。
 
示例:
* <code><nowiki>{{#invoke:String|find|abc123def|12}}</nowiki></code> → {{#invoke:String|find|abc123def|12}}
* <code><nowiki>{{#invoke:String|find|source=abc123def|target=12}}</nowiki></code> → {{#invoke:String|find|source=abc123def|target=12}}
* <code><nowiki>{{#invoke:String|find|source=abc123def|target=pqr}}</nowiki></code> → {{#invoke:String|find|source=abc123def|target=pqr}}
* <code><nowiki>{{#invoke:String|find| abc123def |123}}</nowiki></code> → {{#invoke:String|find| abc123def |123}}
* <code><nowiki>{{#invoke:String|find|source= abc123def |target= 123 }}</nowiki></code> → {{#invoke:String|find|source= abc123def |target= 123 }}
* <code><nowiki>{{#invoke:String|find|source=abc123def|target=%d |start=3 |plain=false }}</nowiki></code> → {{#invoke:String|find|source=abc123def|target=%d |start=3 |plain=false }}
 
与未命名的参数使用时,两端的空格会被保留且被计入:
* <code><nowiki>{{#invoke:String|find|  abc123def |c|false}}</nowiki></code> → {{#invoke:String|find|  abc123def |c|false}}
* <code><nowiki>{{#invoke:String|find|source=  abc123def |target=c|plain=false}}</nowiki></code> → {{#invoke:String|find|source=  abc123def |target=c|plain=false}}
* <code><nowiki>{{#invoke:string|find|abc 123 def|%s|plain=false}}</nowiki></code> → {{#invoke:string|find|abc 123 def|%s|plain=false}}
 
检测字符串是否存在:
* <code><nowiki>{{#ifexpr:{{#invoke:string|find|haystack|needle}}|Found needle|Didn't find needle}}</nowiki></code> → Didn't find needle
 
== replace(gsub) ==
 
此函数在一个字符串内替换到目的字符串或者模式。此函数是通过调用<code>mw.ustring.gsub</code>实现的。
 
用法:
 
: <code><nowiki>{{#invoke:</nowiki>String|replace|''源字符串''|''模式字符串''|''替换字符串''|''替换次数''|''纯标记''}}</code>
 
 
: <code><nowiki>{{#invoke:</nowiki>String|replace|source= ''源字符串'' |pattern= ''模式字符串'' |replace= ''替换字符串'' |count= ''替换次数'' |plain= ''纯标记'' }}</code>
 
参数:
 
; source
: 在此字符串内搜索
; pattern
: 在源内查找此字符串或者模式
; replace
: 使用此字符串替换
; count
: 需要替换的次数,默认为all
; plain
: 布尔值标记,表示目的应该被理解为纯文本,而不是[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Ustring patterns|Scribunto ustring模式]],默认为true
 
示例:
 
* <code><nowiki>"{{#invoke:String|replace| abc123def456 |123|XYZ}}"</nowiki></code> → "{{#invoke:String|replace| abc123def456 |123|XYZ}}"
* <code><nowiki>"{{#invoke:String|replace|source= abc123def456 |pattern= 123 |replace= XYZ }}"</nowiki></code> → "{{#invoke:String|replace|source= abc123def456 |pattern= 123 |replace= XYZ }}"
* <code><nowiki>"{{#invoke:String|replace| abc123def456 |%d+|XYZ|1|false}}"</nowiki></code> → "{{#invoke:String|replace| abc123def456 |%d+|XYZ|1|false}}"
* <code><nowiki>"{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |count=1 |plain= false }}"</nowiki></code> → "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |count=1 |plain= false }}"
* <code><nowiki>"{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |plain= false }}"</nowiki></code> → "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |plain= false }}"
* <code><nowiki>{{#invoke:String|replace|source= 0012001200 |pattern= ^0* |plain= false }}</nowiki></code> → {{#invoke:String|replace|source= 0012001200 |pattern= ^0* |plain= false }}
 
== rep ==
 
将一个字符串重复''n''次,其本质为<code>string.rep</code>。
 
用法:
 
: <code><nowiki>{{#invoke:</nowiki>String|rep|''源''|''次数''}}</code>
 
参数:
 
; 源
: 需要重复的字符串
; 次数
: 重复的次数
 
示例:
 
* <code><nowiki>"{{#invoke:String|rep|hello|3}}"</nowiki></code> → "{{#invoke:String|rep|hello|3}}"
* <code><nowiki>"{{#invoke:String|rep| hello | 3 }}"</nowiki></code> → "{{#invoke:String|rep| hello | 3 }}"
<!--
 
以下函数暂时还不存在,故移除有关的文档:
== escapePattern ==
 
在[[:mw:Special:MyLanguage/LUAREF#Patterns|模式]]中,将''类字符'''替换为''字面字符''。例如,在模式中,字符<code>.</code>会捕获任何字符,escapePattern会将其转换为<code>%.</code>,这样就捕获了字面字符“.”。
 
用法:
* <code><nowiki>{{#invoke:String|escapePattern|</nowiki>''模式字符串''<nowiki>}}</nowiki></code>
 
参数:
 
; 模式字符串
: 需要转义的模式字符串
 
示例:
 
* <code><nowiki>"{{#invoke:String|escapePattern|A.D.}}"</nowiki></code> → "{{#invoke:String|escapePattern|A.D.}}"
* <code><nowiki>"{{#invoke:String|escapePattern|10%}}"</nowiki></code> → "{{#invoke:String|escapePattern|10%}}"
 
== count ==
返回指定的模式的次数。返回不会将匹配交连。
 
用法:
: <code><nowiki>{{#invoke:</nowiki>String|count|''源字符串''|''匹配字符串''|''纯标记''}}</code>
 
 
: <code><nowiki>{{#invoke:</nowiki>String|count|source= ''源字符串'' |pattern= ''匹配字符串''|plain= ''纯标记'' }}</code>
参数:
; source_string
: 在此字符串内数出现次数
; pattern
: 在源内需要数的字符串或者模式
; plain
: 布尔值标记,表示目的应该被理解为纯文本,而不是[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Ustring patterns|Scribunto ustring模式]],默认为true
 
示例:
* 数“a”:<code><nowiki>"{{#invoke:String|count|aabbcc|a}}"</nowiki></code> → "{{#invoke:String|count|aabbcc|a}}"
* 数“aba”出现的次数:<code><nowiki>"{{#invoke:String|count|ababababab|aba}}"</nowiki></code> → "{{#invoke:String|count|ababababab|aba}}"
* 数a或c出现的次数:<code><nowiki>"{{#invoke:String|count|aabbcc|[ac]|plain=false}}"</nowiki></code> → "{{#invoke:String|count|aabbcc|[ac]|plain=false}}"
* 数非a出现的次数:<code><nowiki>"{{#invoke:String|count|aaabaaac|[^a]|plain=false}}"</nowiki></code> → "{{#invoke:String|count|aaabaaac|[^a]|plain=false}}"
* 数开头的a出现的次数:<code><nowiki>"{{#invoke:String|count|aaabaaac|^a|plain=false}}"</nowiki></code> → "{{#invoke:String|count|aaabaaac|^a|plain=false}}"
 
== join ==
将传入的所有字符串连成一个字符串,第一个字符串表示分隔符
 
用法:
: <code><nowiki>{{#invoke:</nowiki>String|join|''分隔符''|''字符串1''|''字符串2''|...}}</code>
参数:
; 分隔符
: 被连接在一起的各个字符串之间的字符串
: 注意对此参数,开头和结尾的空格不会被移除。
; 字符串1/字符串2/...
: 需要连接进来的字符串
示例:
* <code><nowiki>"{{#invoke:String|join|x|foo|bar|baz}}"</nowiki></code> → "{{#invoke:String|join|x|foo|bar|baz}}"
* <code><nowiki>"{{#invoke:String|join||a|b|c|d|e|f|g}}"</nowiki></code> → "{{#invoke:String|join||a|b|c|d|e|f|g}}"
* <code><nowiki>"{{#invoke:String|join|,|a|b|c|d|e|f|g}}"</nowiki></code> → "{{#invoke:String|join|,|a|b|c|d|e|f|g}}"
* <code><nowiki>"{{#invoke:String|join|, |a|b|c|d|e|f|g}}"</nowiki></code> → "{{#invoke:String|join|, |a|b|c|d|e|f|g}}"
* <code><nowiki>"{{#invoke:String|join| &ndash; |a|b|c|d|e|f|g}}"</nowiki></code> → "{{#invoke:String|join| &ndash; |a|b|c|d|e|f|g}}"
前面的这个例子使用了html实体&amp;ndash;,但是unicode字符也是有用的。
 
== endswith ==
{{for|startswith函数|Module:String2#startswith}}
用法:
: <code><nowiki>{{#invoke:</nowiki>String|endswith|''源字符串''|''搜索字符串''}}</code>
 
 
: <code><nowiki>{{#invoke:</nowiki>String|endswith|source= ''源字符串'' |pattern= ''搜索字符串''}}</code>
如果源字符串是以指定的搜索字符串结尾的,返回yes。使用命名参数会移除掉空格。''搜索字符串''不是个Lua模式,而是按照字面解释的。
 
* <code><nowiki>"{{#invoke:String|endswith|xxxyyy|y}}"</nowiki></code> → "{{#invoke:String|endswith|xxxyyy|y}}"
* <code><nowiki>"{{#invoke:String|endswith|xxxyyy|z}}"</nowiki></code> → "{{#invoke:String|endswith|xxxyyy|z}}"

2026年8月5日 (三) 08:28的版本

这个模块提供了基本的字符串操作函数。

此处提供的大多数函数都可以使用命名参数、未命名参数或混合参数调用。 如果使用命名参数,Mediawiki将自动从参数中删除任何前导或尾随空格。取决于预期用途,保留或删除此类空白各有优劣的。

全局参数

ignore_errors
如果设置为“true”或“1”,则任何错误条件都将导致返回空字符串而不是错误消息。
error_category
如果发生错误,则指定要包含在错误消息中的分类的名称。
no_category
如果设置为“true”或 1,则在生成错误时不会添加任何类别。

len

此函数返回目标字符串的长度。

用法:

{{#invoke:String|len|target_string}}

{{#invoke:String|len|s= target_string }}

参数:

s
目标字符串

示例:

  • {{#invoke:String|len| abcdefghi }} → 11
  • {{#invoke:String|len|s= abcdefghi }} → 9

sub

此函数返回指定索引处目标字符串的子字符串。

用法:

{{#invoke:String|sub|target_string|start_index|end_index}}

{{#invoke:String|sub|s= target_string |i= start_index |j= end_index }}

参数:

s
返回此字符串的子集
i
要返回的子字符串的第一个索引,默认为1。
j
要返回的字符串的最后一个索引,默认为最后一个字符。

字符串的第一个字符的索引为1。如果i或j是负值,则将其解析为通过从字符串末尾计数来选择字符。因此,值-1与选择字符串的最后一个字符相同。

如果请求的索引超出给定字符串的范围,则会报告错误。

示例:

  • "{{#invoke:String|sub| abcdefghi }}" → " abcdefghi "
  • "{{#invoke:String|sub|s= abcdefghi }}" → "abcdefghi"
  • "{{#invoke:String|sub| abcdefghi | 3 }}" → "bcdefghi "
  • "{{#invoke:String|sub|s= abcdefghi |i= 3 }}" → "cdefghi"
  • "{{#invoke:String|sub| abcdefghi | 3 | 4 }}" → "bc"
  • "{{#invoke:String|sub|s= abcdefghi |i= 3 |j= 4 }}" → "cd"

sublength

此函数实现了{{Str sub old}}的功能,保留仅为维持旧的模板。

用法:

{{#invoke:String|sublength|s= -{}-目标字符串 |i= 开始索引 |len= 长度 }}

参数:

s
字符串
i
返回的子串的开始索引。第一个个字符的索引为0。
len
返回的字符串的长度,默认为最后一个字符。

示例:

  • {{#invoke:String|sublength|s= abcdefghi }} → abcdefghi
  • {{#invoke:String|sublength|s= abcdefghi |i= 3 }} → defghi
  • {{#invoke:String|sublength|s= abcdefghi |i= 3 |len= 4 }} → defg

match

此函数从源字符串返回一个匹配指定模式的子字符串。

用法:

{{#invoke:String-{}-|match|源字符串|模式字符串|开始索引|匹配数量|纯标记|无匹配输出}}

或者

{{#invoke:String|-{}-match|s= 源字符串 |pattern= 模式字符串 |start= 开始索引|match= 匹配数量|plain= 纯标记 |nomatch= 无匹配输出 }}

参数:

s
在这个字符串内搜索
pattern
需要在字符串内搜索的模式或者字符串
start
源字符串内的索引,从此索引开始搜索。字符串的第一个字符的索引为1。默认为1。
match
在一些情况下,可能需要在单个字符串中进行多次匹配。此参数指定了返回哪一个匹配,其中第一个匹配就是match=1。如果指定了负数,那么返回的匹配从最后一个匹配开始数的。因此match=-1表达返回最后一个匹配。默认为1。
plain
pattern是否应该理解为纯字符串,而非正则表达式。默认为false。
nomatch
如果没有找到匹配,返回nomatch的值,而不是一个错误。

如果match_number或start_index超出了查询的字符串的范围,此函数会产生错误。如果没有找到匹配,也会产生错误。

如果添加了参数ignore_errors=true,那么错误会被禁止,失败时返回的是一个空字符串。

匹配是Lua的一种正则表达式,更多信息可以参考:

示例:

  • {{#invoke:String|match| abc123def456 |%d+}} → 123
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ }} → 123
  • {{#invoke:String|match| abc123def456 |%d+|6}} → 23
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 }} → 3
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 |match= 2 }} → 456
  • {{#invoke:String|match|s= abc123%d+ |pattern= %d+ }} → 123
  • {{#invoke:String|match|s= abc123%d+ |pattern= %d+ |plain= true }} → %d+
  • {{#invoke:String|match|s= abc |pattern= %d }}字符串模块出错:找不到匹配
  • {{#invoke:String|match|s= abc |pattern= %d |nomatch= No numeric characters in string }} → No numeric characters in string
  • {{#invoke:String|match|s= abc |pattern= %d |ignore_errors= true }}
  • {{#invoke:String|match|s= 0012001200 |pattern= 0*(%d*) }} → 12001200

pos

返回在目标字符串中的位置pos处的单个字符。

用法:

{{#invoke:String|pos|-{}-目标字符串|索引值}}

{{#invoke:String|pos|-{}-target= 目标字符串 |pos= 索引值 }}

参数:

目标
在此字符串内搜索
pos
需要返回的字符所在的索引。

第一个字符的索引值为1。

如果为负值,则此函数会从字符串的最后面开始倒数。也就是说,pos=-1相当于返回最后一个字符。

如果此值为0,或者超出了字符串的长度,则会返回错误。

示例:

  • {{#invoke:String|pos| abcdefghi | 4 }} → c
  • {{#invoke:String|pos|target= abcdefghi |pos= 4 }} → d

str_find

此函数与{{Str sub old}}的行为重复,包含了其所有的技巧,仅为支持存在的模板,但是对于新的代码和模板不推荐使用。新的代码建议直接使用find函数。

返回源字符串中匹配目的的第一个索引。索引是从1开始数的,如果源字符串中找不到目标字符串,则返回-1。

注意:如果目标字符串是空白或者缺失,则函数返回值为1,这可能不是预期的行为,必须要单独考虑。

用法:

{{#invoke:String|str_find|-{}-源字符串|目标字符串}}

{{#invoke:String|str_find|source= 源字符串 |target= 目标字符串 }}

参数:

source
在此字符串内搜索
target
在源内搜索的字符串

示例:

  • {{#invoke:String|str_find| abc123def }} → 1
  • {{#invoke:String|str_find|source= abc123def }} → 1
  • {{#invoke:String|str_find| abc123def |123}} → 5
  • {{#invoke:String|str_find|source= abc123def |target= 123 }} → 4
  • {{#invoke:String|str_find| abc123def |not}} → -1

find

此函数在一个字符串内搜索另一个字符串。

用法:

{{#invoke:String|find-{}-|源字符串|目标字符串|开始索引|纯标记}}

{{#invoke:String|find|-{}-source= 源字符串 |target= 目标字符串 |start= 开始索引 |plain= 纯标记 }}

参数:

source
在此字符串内搜索
target
在源字符串内搜索的字符串
start
在源字符串的此位置索引版主开始搜索。默认为1
plain
布尔值标记,表示目的应该被理解为纯文本,而不是Scribunto ustring模式,默认为true

此函数返回了在索引>"start",其中"source"中可以持续到"target"。索引是从1开始数的。如果没有找到目标字符串,函数返回0。如果索引或者目的缺失或者是空的,此函数也会返回0。

此函数应该可以安全地操作UTF-8字符串。

示例:

  • {{#invoke:String|find|abc123def|12}} → 4
  • {{#invoke:String|find|source=abc123def|target=12}} → 4
  • {{#invoke:String|find|source=abc123def|target=pqr}} → 0
  • {{#invoke:String|find| abc123def |123}} → 5
  • {{#invoke:String|find|source= abc123def |target= 123 }} → 4
  • {{#invoke:String|find|source=abc123def|target=%d |start=3 |plain=false }} → 4

与未命名的参数使用时,两端的空格会被保留且被计入:

  • {{#invoke:String|find| abc123def |c|false}} → 5
  • {{#invoke:String|find|source= abc123def |target=c|plain=false}} → 3
  • {{#invoke:string|find|abc 123 def|%s|plain=false}} → 4

检测字符串是否存在:

  • {{#ifexpr:{{#invoke:string|find|haystack|needle}}|Found needle|Didn't find needle}} → Didn't find needle

replace(gsub)

此函数在一个字符串内替换到目的字符串或者模式。此函数是通过调用mw.ustring.gsub实现的。

用法:

{{#invoke:String|replace|源字符串|模式字符串|替换字符串|替换次数|纯标记}}

{{#invoke:String|replace|source= 源字符串 |pattern= 模式字符串 |replace= 替换字符串 |count= 替换次数 |plain= 纯标记 }}

参数:

source
在此字符串内搜索
pattern
在源内查找此字符串或者模式
replace
使用此字符串替换
count
需要替换的次数,默认为all
plain
布尔值标记,表示目的应该被理解为纯文本,而不是Scribunto ustring模式,默认为true

示例:

  • "{{#invoke:String|replace| abc123def456 |123|XYZ}}" → " abcXYZdef456 "
  • "{{#invoke:String|replace|source= abc123def456 |pattern= 123 |replace= XYZ }}" → "abcXYZdef456"
  • "{{#invoke:String|replace| abc123def456 |%d+|XYZ|1|false}}" → " abcXYZdef456 "
  • "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |count=1 |plain= false }}" → "abcXYZdef456"
  • "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |plain= false }}" → "abcXYZdefXYZ"
  • {{#invoke:String|replace|source= 0012001200 |pattern= ^0* |plain= false }} → 12001200

rep

将一个字符串重复n次,其本质为string.rep

用法:

{{#invoke:String|rep||次数}}

参数:

需要重复的字符串
次数
重复的次数

示例:

  • "{{#invoke:String|rep|hello|3}}" → "hellohellohello"
  • "{{#invoke:String|rep| hello | 3 }}" → " hello hello hello "