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

用戶:宇文天啟/字符串處理

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋

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()

參見