2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:宇文天启/字符串处理

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

Icon-info.png
这是一个更新中的页面,相关内容可能尚未完善或者创建,欢迎您参与本页面的完善。

模块:String的功能是提供基本的字符串函数。根据这些基本函数能扩展出更多的用法。

大多数函数都提供命名参数和未命名参数,甚至可以混合调用。如果使用命名参数,系统将自动删除该参数两端的空白。

全局选项

以下经测试无效
ignore_errors(错误值忽略)
如果设为true或1,函数会在错误的情况下返回一个空字符串,而不是一个错误信息。
error_category(错误分类)
如果发生错误时,可指定一个错误分类,默认为Category:Errors reported by Module String.
no_category(不分类)
如果设置为true或1,在产生错误时不添加分类。

基本函数

len

  • 返回源字符串长度。
代码示例 {{#invoke:String|len|target_string}}
输出效果 13
代码示例 {{#invoke:String|len|s= target_string }}
输出效果 13
  • 参数说明:
s 源字符串

sub

  • 按位置返回源字符串的子字符串。
代码格式 {{#invoke:String|sub|target_string|start_index|end_index}}
代码示例 {{#invoke:String|sub|xx迟迟不动手,背后恐怕有肮脏的屁眼交易。|4|6}}
输出效果 迟不动
代码格式 {{#invoke:String|sub|s= target_string |i= start_index |j= end_index }}
代码示例 {{#invoke:String|sub|s= 背后恐怕有肮脏的P眼交易 |i= 9 |j= 12 }}
输出效果 P眼交易
  • 参数说明:
s 源字符串
i 子字符串的起始位置,默认为1
j 子字符串的终止位置,默认为最后一个字符的位置

字符串的第一个字符位置为1。如果i或j是负值,则会从字符串结尾计数选择字符。因此,值为-1类似于选择字符串的最后一个字符。

如果下标越界,会产生错误。

sublength

  • 按长度返回源字符串的子字符串。
代码格式 {{#invoke:String|sublength|s= target_string |i= start_index |len= length }}
代码示例 {{#invoke:String|sublength|s=背后恐怕有肮脏的P眼交易|i=1|len=4}}
输出效果 后恐怕有
  • 参数说明:
s 源字符串
i 子字符串的起始位置,默认为0
len 子字符串的长度,默认为能取到的最大长度

字符串的第一个字符位置为0,和sub不一样,需要注意。

这个函数已经淘汰,目测是为了保持兼容性留下来的。

match

  • 返回正则表达式相匹配的源字符串的子串。
代码格式 {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
代码示例 {{#invoke:String|match|还不动手,背后恐怕有肮脏的屁眼交易。|肮脏|1|1|true}}
输出效果 肮脏
代码格式 {{#invoke:String|match|s= source_string |pattern= pattern_string |start= start_index|match= match_number|plain= plain_flag |nomatch= nomatch_output }}
代码示例 {{#invoke:String|match|s=背后恐怕有肮脏的P眼交易|pattern=[a-zA-Z]|start=2|match=-1|plain=false|nomatch=没找到poi}}
输出效果 P
  • 参数说明:
s 源字符串
pattern 查找的字符串或正则表达式
start 查找的起始位置,默认为1
match 在存在多个匹配结果时,指定要返回的匹配项,若为-1则返回最后一个。默认为1。
plain pattern是否为纯文本(非正则),默认为false
nomatch 如果没有匹配项,不输出错误信息而输出指定值

如果match_number或START_INDEX超出范围的字符串被查询,那么这个功能产生错误。如果没有找到匹配,也会产生错误。 如果加上参数ignore_errors= true,则错误将被抑制,一个空字符串将在任何故障被退回。

For information on constructing Lua patterns, a form of regular expression, see:

pos

  • 返回源字符串上某个位置的单个字符。
代码格式 {{#invoke:String|pos|target_string|index_value}}
代码示例 {{#invoke:String|pos|有句话说出来你可能不信|3}}
输出效果
代码格式 {{#invoke:String|pos|target= target_string |pos= index_value }}
代码示例 {{#invoke:String|pos|target=有句话说出来你可能不信|pos=-2}}
输出效果
  • 参数说明:
target 源字符串
pos 目标字符的位置

第一个字符的索引值为1。如果设置负值,将从字符串的结尾倒数选择一个字符。换句话说POS=-1相当于最后一个字符。

0或超出字符串的长度会返回一个错误。

find

  • 返回指定字符串在源字符串中第一次出现的位置。
代码格式 {{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
代码示例 {{#invoke:String|find|吃葡萄不吐葡萄皮|葡萄|4|true}}
输出效果 6
代码格式 {{#invoke:String|find|source= source_str |target= target_str |start= start_index|plain= plain_flag }}
代码示例 {{#invoke:String|find|source=难道真的有腌臜的屁眼交易?|target=腌臜|start=3|plain=true}}
输出效果 6
  • 参数说明:
source 源字符串
target 待查询的字符串
start 起始查询位置,默认为1
plain target是否为纯文本(非正则),默认为true

返回其中的target在source内发现的第一个大于start的位置。如果没有找到target,则该函数返回0。如果source或target的值为missing或empty,也返回0。

这个函数必须基于UTF-8的安全字符串。

replace

  • 用指定字符串替换源字符串的对应内容。
代码格式 {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
代码示例 {{#invoke:String|replace|康帅博(中国)山寨有险公司|^(%s*)(.*)(%(.*%))(%s*)|%2|all|false}}
输出效果 康帅博山寨有险公司
代码格式 {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|count=replacement_count|plain=plain_flag}}
代码示例 {{#invoke:String|replace|source=水浒杀:宋江|pattern=^(.*):(.*)$|replace=%2|count=1|plain=false}}
输出效果 宋江
代码示例 {{#invoke:String|replace|source=水浒杀:宋江水|pattern=水|replace=尿|count=1}}
输出效果 尿浒杀:宋江水
  • 参数说明:
source 源字符串
pattern 匹配字符串或正则表达式
replace 替换目标
count 替换次数,默认为all
plain pattern是否为纯文本(非正则),默认为true

rep

  • 重复一个字符串N次。
代码格式 {{#invoke:String|rep|source|count}}
代码示例 {{#invoke:String|rep|妮可|2}}妮
输出效果 妮可妮可妮
  • 参数说明:
source 源字符串
count 重复的次数

实用扩展

left/mid/right

  • 简单字符串截取函数:left(x)、mid(x,y)、right(x)的实现方法
表达式 功能代码+注释 实现效果
left(5) {{#invoke:String|sub|administrator|j=5}} (注)j=x admin
mid(5,2) {{#invoke:String|sublength|s=administrator|i=4|len=2}} (注)i=x-1;len=y ni
{{#invoke:String|sub|administrator|i=5|j=6}} (注)i=x;j=x+y-1 ni
right(5) {{#invoke:String|sub|administrator|i=-5}} (注)i=-x rator
模版代码
表达式 功能代码 调用方法
left(x) {{#invoke:String|sub|{{{1}}}|j={{{2}}}}} {{模版名|源字符串|左起字符数}}
mid(x,y) {{#invoke:String|sub|{{{1}}}|i={{{2}}}|j={{#expr:{{{2}}}+{{{3}}}-1}}}} {{模版名|源字符串|起始位置|字符数}}
right(x) {{#invoke:String|sub|{{{1}}}|i={{#expr:-{{{2}}}}}}} {{模版名|源字符串|右起字符数}}

startwith/contains/endwith

  • 首尾判断:startwith()、endwith()的实现方法
  • 包含判断:contains()的实现方法
表达式 功能代码 实现效果+注释
startwith() {{#invoke:String|find|administrator|admin}} 1 (注)返回1则为true,其余值为false
contains() {{#invoke:String|find|administrator|stra}} 7 (注)返回0则为false,其余值为true
endwith() {{#invoke:String|match|administrator|rator$|plain=false|nomatch=0}} rator (注)返回0则为false,其余值为true
布尔值输出
表达式 功能代码 输出值
startwith() {{#ifeq:{{#invoke:String|find|administrator|admin}}|1|true|false}} true
contains() {{#ifeq:{{#invoke:String|find|administrator|stra}}|0|false|true}} true
endwith() {{#ifeq:{{#invoke:String|match|administrator|rator$|plain=false|nomatch=0}}|0|false|true}} true
模版代码
表达式 功能代码 调用方法
startwith() {{#ifeq:{{#invoke:String|find|{{{1}}}|{{{2}}}}}|1|true|false}} {{模版名|源字符串|待匹配首字符串}}
contains() {{#ifeq:{{#invoke:String|find|{{{1}}}|{{{2}}}}}|0|false|true}} {{模版名|源字符串|待匹配字符串}}
endwith() {{#ifeq:{{#invoke:String|match|{{{1}}}|{{{2}}}$|plain=false|nomatch=0}}|0|false|true}} {{模版名|源字符串|待匹配尾字符串}}

max/min

split/join

  • 字符串连接、拆分:split()、join()的实现方法
模版代码
表达式 功能代码 调用方法
join() {{#fornumargs:num|value| {{#switch:{{#var:num|}} | 1={{#var:value}} | #default={{#if:{{#var:value|}}|{{{char|,}}}{{#var:value}}}} }} }} {{模版名|char=连接字符|字符串1|字符串2|字符串3...}}
split() {{Str split}} {{Str split|源字符串|分割字符|变量前缀}}

现成模版

用于切掉参数{{{1}}}中的最后{{{2}}}个字符(不填则视作切掉0个字符)。
从左切除
同left()
返回左起第n个字符(不含)右边的文字。
同right()

参见