Difference between revisions of "String.gsub"

From GiderosMobile
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
 
'''Available since:''' Gideros 2011.6<br/>
 
'''Available since:''' Gideros 2011.6<br/>
 +
'''Class:''' [[string]]<br/>
 +
 
=== Description ===
 
=== Description ===
Returns a copy of s in which all (or the first n, if given) occurrences of the pattern have been replaced by a replacement string specified by repl, which can be a string, a table, or a function. gsub also returns, as its second value, the total number of matches that occurred.  
+
Returns a copy of s in which all (or the first n, if given) occurrences of the pattern have been replaced by a replacement string specified by repl, which can be a string, a table, or a function. gsub also returns, as its second value, the total number of matches that occurred.
 +
<syntaxhighlight lang="lua">
 +
(string) = string.gsub(s,pat,repl,n)
 +
</syntaxhighlight>
  
 +
* If repl is a string, then its value is used for replacement. The character % works as an escape character: any sequence in repl of the form %n, with n between 1 and 9, stands for the value of the n-th captured substring (see below). The sequence %0 stands for the whole match. The sequence %% stands for a single %.
 +
* If repl is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key.
 +
* If repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument.
 +
* If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string).
  
If repl is a string, then its value is used for replacement. The character % works as an escape character: any sequence in repl of the form %n, with n between 1 and 9, stands for the value of the n-th captured substring (see below). The sequence %0 stands for the whole match. The sequence %% stands for a single %.
+
=== Parameters ===
 +
'''s''': (string) string where to make replacements<br/>
 +
'''pat''': (string) pattern what to replace<br/>
 +
'''repl''': (varies) to what to replace<br/>
 +
'''n''': (number) number of replacements '''optional'''<br/>
  
 +
=== Return values ===
 +
'''Returns''' (string) modified string with replacements<br/>
  
If repl is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key.
+
=== Examples ===
 
+
'''Simple example:'''
 
+
<syntaxhighlight lang="lua">
If repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument.
+
local mystring = "hello, world!"
 
+
local newstring = string.gsub(mystring, "world", "mundo")
 
+
local newstring2 = mystring:gsub("world", "mundo") -- this is the same as above but shorter!
If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string).
+
</syntaxhighlight>
 
 
  
Here are some examples:  
+
'''Advanced examples:'''
 +
<syntaxhighlight lang="lua">
 +
x = string.gsub("hello world", "(%w+)", "%1 %1") -- x="hello hello world world"
 +
x = string.gsub("hello world", "%w+", "%0 %0", 1) -- x="hello hello world"
 +
x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1") -- x="world hello Lua from"
 +
x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv) -- x="home = /home/roberto, user = roberto"
 +
x = string.gsub("4%2B5 = $return 4%2B5$", "%$(.-)%$", function (s) return loadstring(s)() end) -- x="4%2B5 = 9"
 +
local t = {name="lua", version="5.1"}''
 +
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t) -- x="lua-5.1.tar.gz"
 +
</syntaxhighlight>
  
`x = string.gsub("hello world", "(%w+)", "%1 %1") --> x="hello hello world world"`
+
{{String}}
   
 
`x = string.gsub("hello world", "%w+", "%0 %0", 1) --> x="hello hello world"`
 
   
 
`x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1") --> x="world hello Lua from"`
 
   
 
`x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)`
 
`--> x="home = /home/roberto, user = roberto"`
 
   
 
`x = string.gsub("4%2B5 = $return 4%2B5$", "%$(.-)%$", function (s) return loadstring(s)() end) --> x="4%2B5 = 9"`
 
<br/>
 
`local t = {name="lua", version="5.1"}`
 
`x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t) --> x="lua-5.1.tar.gz"`
 
<source lang="lua">
 
(string) = string.gsub(s,pat,repl,n)
 
</source>
 
'''s''': (string) string where to make replacements ''''''<br/>
 
'''pat''': (string) pattern what to replace ''''''<br/>
 
'''repl''': (varies) to what to replace ''''''<br/>
 
'''n''': (number) number of replacements '''optional'''<br/>
 
'''Returns''' (string) modified string with replacements<br/>
 

Latest revision as of 14:33, 13 July 2023

Available since: Gideros 2011.6
Class: string

Description

Returns a copy of s in which all (or the first n, if given) occurrences of the pattern have been replaced by a replacement string specified by repl, which can be a string, a table, or a function. gsub also returns, as its second value, the total number of matches that occurred.

(string) = string.gsub(s,pat,repl,n)
  • If repl is a string, then its value is used for replacement. The character % works as an escape character: any sequence in repl of the form %n, with n between 1 and 9, stands for the value of the n-th captured substring (see below). The sequence %0 stands for the whole match. The sequence %% stands for a single %.
  • If repl is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key.
  • If repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument.
  • If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string).

Parameters

s: (string) string where to make replacements
pat: (string) pattern what to replace
repl: (varies) to what to replace
n: (number) number of replacements optional

Return values

Returns (string) modified string with replacements

Examples

Simple example:

local mystring = "hello, world!"
local newstring = string.gsub(mystring, "world", "mundo")
local newstring2 = mystring:gsub("world", "mundo") -- this is the same as above but shorter!

Advanced examples:

x = string.gsub("hello world", "(%w+)", "%1 %1") -- x="hello hello world world"
x = string.gsub("hello world", "%w+", "%0 %0", 1) -- x="hello hello world"
x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1") -- x="world hello Lua from"
x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv) -- x="home = /home/roberto, user = roberto"
x = string.gsub("4%2B5 = $return 4%2B5$", "%$(.-)%$", function (s) return loadstring(s)() end) -- x="4%2B5 = 9"
local t = {name="lua", version="5.1"}''
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t) -- x="lua-5.1.tar.gz"