string.gsub()

类型 函数
string.*
返回值 字符串数字
修订 版本 2024.3703
关键词 string,gsub,sub,search
另请参阅 string.find()
string.gmatch()
string.match()

概览

替换字符串中模式的所有出现。返回执行替换操作后的字符串以及替换次数(如果没有,则为 0.

语法

string.gsub( s, pattern, repl [, n] )

s:gsub( pattern, repl [,n] )
s (必需)

字符串. 待搜索的字符串。

pattern (必需)

字符串. 用于指定要匹配模式的字符串。请参阅 Lua 字符串操作

repl (必需)

字符串函数. 根据类型,string.gsub() 的工作方式如下

  • 如果 repl 是字符串,则使用其值进行替换。字符 % 充当转义字符:repl 中的任何序列 %n,其中 n19 之间,都代表nth捕获的子字符串。序列 %0 代表整个匹配项,序列 %% 代表单个 %

  • 如果 repl 是表,则使用第一个捕获作为键对每个匹配项查询表;如果模式没有指定捕获,则使用整个匹配项作为键。

  • 如果 repl 是函数,则在每次匹配项出现时都会调用该函数,并按顺序将所有捕获的子字符串作为参数传递;如果模式没有指定捕获,则整个匹配项作为唯一参数传递。

  • 如果表查询或函数调用返回的值是字符串或数字,则将其用作替换字符串;否则,如果它为 falsenil,则不进行替换( 字符串中保留原始匹配项)。

n (可选)

数字. 要替换的模式的出现次数。

示例

print( string.gsub( "Hello banana", "banana", "Corona user" ) ) 
print( string.gsub( "banana", "a", "A", 2 ) )             -- Limit substitutions made to 2
print( string.gsub( "banana", "(an)", "%1-" ) )           -- Capture any occurances of 'an' and replace
print( string.gsub( "banana", "a(n)", "a(%1)" ) )         -- Brackets around n's which follow a's
print( string.gsub( "banana", "(a)(n)", "%2%1" ) )        -- Reverse any 'an's
print( string.gsub( "Hello Lua user", "(%w+)", function(w) return string.len(w) end ) )  -- Replace with lengths
print( string.gsub( "banana", "(a)", string.upper ) )                                    -- Make all 'a's found uppercase
print( string.gsub( "banana", "(a)(n)", function(a,b) return b..a end ) )                -- Reverse any 'an's
print( string.gsub( "The big {brown} fox jumped {over} the lazy {dog}.", "{(.-)}", function(a) print(a) end ) )
print( string.gsub( "The big {brown} fox jumped {over} the lazy {dog}.", "{(.*)}", function(a) print(a) end ) )