lua如何匹配可选的单词? 5
我们知道如果是posix标准的正则,我想用一个模式匹配hellohi则可以用"hello|hi"模式,|实现了模式的可选择性,但是Lua不符合posix标准,那么它如何实...
我们知道如果是posix标准的正则,我想用一个模式匹配
hello
hi
则可以用"hello|hi"模式,|实现了模式的可选择性,
但是Lua不符合posix标准,那么它如何实现这样的功能呢? 展开
hello
hi
则可以用"hello|hi"模式,|实现了模式的可选择性,
但是Lua不符合posix标准,那么它如何实现这样的功能呢? 展开
展开全部
字符串库在表string内提供所有函数。它也给字符串设置元表,其中的__index字段指向string表。因此,你可以使用面向对象风格的字符串函数。例如,string.byte(s, i)可写为s:byte(i)。
string.byte (s [, i [, j]])
返回字符s, s[i+1], ···, s[j]的内部数字代码。i缺省为1;j缺省为i。
注意数字代码不一定是跨平台可移植的。
string.char (···)
接受0获多个整数。返回一个字符串,其长度等于参数个数,其中的每个字符的内部数字代码等于相应的参数。
注意数字代码不一定是跨平台可移植的。
string.dump (function)
返回给定函数的二进制表示的字符串,之后在其上应用loadstring返回函数的拷贝。function必须是不带upvalueLua函数。
string.find (s, pattern [, init [, plain]])
在字符串s中查找pattern的第一个匹配。如果找到则返回它开始和结束处在s中的索引;否则,返回nil。可选的第三参数init是数字,指定从哪儿开始搜索;其缺省值是1并且可为负数。如果真值作为可选的第四参数plain,则关闭模式匹配设备,所以函数执行无格式的“查找子串”操作,pattern中的字符并不被认为是“魔术的(magic)”。注意,如果给出了plain,则init也必须给出。
如果模式具有捕获(capture),则在成功的匹配中被捕获的值也在两个索引后面返回。
string.format (formatstring, ···)
Returns a formatted version of its variable number of arguments following the description given in its first argument (which must be a string). 格式字符串遵循同printf族标准C函数同样的规则。仅有的区别是不支持*、l、L、n、p和h等选项/修饰符,而且有个额外选项q。q选项以可安全地为Lua解释器读取的适当形式格式化字符串:字符串被写在双引号之间,而且字符串中的所有双引号、换行、内嵌的0和反斜杠被恰当地转义。例如,调用
string.format('%q', 'a string with "quotes" and \n new line')
产生字符串:
"a string with \"quotes\" and \
new line"
选项c、d、E、e、f, g、G、i、o、u、X和x都预期得到数字作为参数,然而q和s期望得到字符串。
该函数不接受含有内嵌的0的字符串值,除了作为q选项的参数。
string.gmatch (s, pattern)
返回一个迭代器函数,每次调用返回来自pattern的下一个捕获,从字符串s开头直到结尾。如果pattern没指定捕获则每次调用产生整个匹配。
作为例子,下面的循环
s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
print(w)
end
将迭代来自字符串s的所有单词,每行打印一个。下一个例子从给定的字符串收集所有的键=值对放在表中:
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "^(%w+)=(%w+)") do
t[k] = v
end
对于该函数,模式起始处的‘^’不能作为锚点,因为这会阻止迭代。
string.gsub (s, pattern, repl [, n])
返回s的拷贝,其中出现的所有(或前n个,如果指定)pattern被替换为repl——可以是字符串、表或函数,指定的替换串。gsub也返回出现的匹配的总数作为第二个值。
如果repl是字符串,它的值被用作替换式。字符%用作转义字符:repl中的任何形如%n的序列代表第n个捕获的子串(见下面),其中n在1和9之间。序列%0代表整个匹配。序列%%代表单个%。
如果repl是表,则对于每个匹配,用第一个捕获作为键查询表;如果模式未指定捕获,则整个匹配被用作键。
如果repl是函数,则每次匹配发生时都按顺序传入所有捕获的子串作为参数调用该函数;如果模式没指定捕获,则整个匹配作为单个参数传入。
如果表查询或函数调用返回的结果是个字符串或数字,则被用作替换串;否则,如果是false或nil,则不发生替换(即原始匹配被保持在字符串中)。
这里有一些例子:
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+5 = $return 4+5$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
--> x="4+5 = 9"
local t =
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"
string.len (s)
接受字符串并返回其长度。空串""长度为0。内嵌的0被计算在内,所以"a\000bc\000"长度为5。
string.lower (s)
接受字符串并返回其所有大写字母变为小写的拷贝。所有其他字符不变。大写字母的定义依赖于但前locale。
string.match (s, pattern [, init])
在字符串s中查找pattern的首次匹配。如果找到一个,则返回来自模式的捕获;否则返回nil。如果pattern未指定捕获则返回整个匹配。可选的第三个参数init是数字,指定从哪儿开始搜索;其缺省值是1并且可为负。
string.rep (s, n)
返回字符串s的n个拷贝拼接字符串。
string.reverse (s)
返回字符串s的颠倒的字符串。
string.sub (s, i [, j])
返回s的子串,它起始于i并延续到j;i和j可为负数。如果省略j,则它被假定为-1(同字符串长度一样)。特别地,调用string.sub(s,1,j)返回s长为j的前缀,而且string.sub(s, -i)返回s长为i的后缀。
string.upper (s)
接受字符串并返回其所有小写字母变为大写的拷贝。所有其他字符不变。小写字母的定义依赖于但前locale
本文来自CSDN博客,转载请标明出处:file:///C:/Documents%20and%20Settings/crow/桌面/用的上的Lua函数.mht
string.byte (s [, i [, j]])
返回字符s, s[i+1], ···, s[j]的内部数字代码。i缺省为1;j缺省为i。
注意数字代码不一定是跨平台可移植的。
string.char (···)
接受0获多个整数。返回一个字符串,其长度等于参数个数,其中的每个字符的内部数字代码等于相应的参数。
注意数字代码不一定是跨平台可移植的。
string.dump (function)
返回给定函数的二进制表示的字符串,之后在其上应用loadstring返回函数的拷贝。function必须是不带upvalueLua函数。
string.find (s, pattern [, init [, plain]])
在字符串s中查找pattern的第一个匹配。如果找到则返回它开始和结束处在s中的索引;否则,返回nil。可选的第三参数init是数字,指定从哪儿开始搜索;其缺省值是1并且可为负数。如果真值作为可选的第四参数plain,则关闭模式匹配设备,所以函数执行无格式的“查找子串”操作,pattern中的字符并不被认为是“魔术的(magic)”。注意,如果给出了plain,则init也必须给出。
如果模式具有捕获(capture),则在成功的匹配中被捕获的值也在两个索引后面返回。
string.format (formatstring, ···)
Returns a formatted version of its variable number of arguments following the description given in its first argument (which must be a string). 格式字符串遵循同printf族标准C函数同样的规则。仅有的区别是不支持*、l、L、n、p和h等选项/修饰符,而且有个额外选项q。q选项以可安全地为Lua解释器读取的适当形式格式化字符串:字符串被写在双引号之间,而且字符串中的所有双引号、换行、内嵌的0和反斜杠被恰当地转义。例如,调用
string.format('%q', 'a string with "quotes" and \n new line')
产生字符串:
"a string with \"quotes\" and \
new line"
选项c、d、E、e、f, g、G、i、o、u、X和x都预期得到数字作为参数,然而q和s期望得到字符串。
该函数不接受含有内嵌的0的字符串值,除了作为q选项的参数。
string.gmatch (s, pattern)
返回一个迭代器函数,每次调用返回来自pattern的下一个捕获,从字符串s开头直到结尾。如果pattern没指定捕获则每次调用产生整个匹配。
作为例子,下面的循环
s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
print(w)
end
将迭代来自字符串s的所有单词,每行打印一个。下一个例子从给定的字符串收集所有的键=值对放在表中:
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "^(%w+)=(%w+)") do
t[k] = v
end
对于该函数,模式起始处的‘^’不能作为锚点,因为这会阻止迭代。
string.gsub (s, pattern, repl [, n])
返回s的拷贝,其中出现的所有(或前n个,如果指定)pattern被替换为repl——可以是字符串、表或函数,指定的替换串。gsub也返回出现的匹配的总数作为第二个值。
如果repl是字符串,它的值被用作替换式。字符%用作转义字符:repl中的任何形如%n的序列代表第n个捕获的子串(见下面),其中n在1和9之间。序列%0代表整个匹配。序列%%代表单个%。
如果repl是表,则对于每个匹配,用第一个捕获作为键查询表;如果模式未指定捕获,则整个匹配被用作键。
如果repl是函数,则每次匹配发生时都按顺序传入所有捕获的子串作为参数调用该函数;如果模式没指定捕获,则整个匹配作为单个参数传入。
如果表查询或函数调用返回的结果是个字符串或数字,则被用作替换串;否则,如果是false或nil,则不发生替换(即原始匹配被保持在字符串中)。
这里有一些例子:
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+5 = $return 4+5$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
--> x="4+5 = 9"
local t =
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"
string.len (s)
接受字符串并返回其长度。空串""长度为0。内嵌的0被计算在内,所以"a\000bc\000"长度为5。
string.lower (s)
接受字符串并返回其所有大写字母变为小写的拷贝。所有其他字符不变。大写字母的定义依赖于但前locale。
string.match (s, pattern [, init])
在字符串s中查找pattern的首次匹配。如果找到一个,则返回来自模式的捕获;否则返回nil。如果pattern未指定捕获则返回整个匹配。可选的第三个参数init是数字,指定从哪儿开始搜索;其缺省值是1并且可为负。
string.rep (s, n)
返回字符串s的n个拷贝拼接字符串。
string.reverse (s)
返回字符串s的颠倒的字符串。
string.sub (s, i [, j])
返回s的子串,它起始于i并延续到j;i和j可为负数。如果省略j,则它被假定为-1(同字符串长度一样)。特别地,调用string.sub(s,1,j)返回s长为j的前缀,而且string.sub(s, -i)返回s长为i的后缀。
string.upper (s)
接受字符串并返回其所有小写字母变为大写的拷贝。所有其他字符不变。小写字母的定义依赖于但前locale
本文来自CSDN博客,转载请标明出处:file:///C:/Documents%20and%20Settings/crow/桌面/用的上的Lua函数.mht
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询