--[[
.(点): 与任何字符配对
%a: 与任何字母配对
%c: 与任何控制符配对(例如\n)
%d: 与任何数字配对
%l: 与任何小写字母配对
%p: 与任何标点(punctuation)配对
%s: 与空白字符配对
%u: 与任何大写字母配对
%w: 与任何字母/数字配对
%x: 与任何十六进制数配对
%z: 与任何代表0的字符配对
%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次
- 匹配前一字符0次或多次
? 匹配前一字符0次或1次
%' 用作特殊字符的转义字符,因此 '%.' 匹配点;'%%' 匹配字符 '%'。转义字符 '%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。
链接:https://www.jianshu.com/p/f4a17bf3bb9e
string.find(字符串查找)
string.gsub(全局字符串替换)
string.gfind(全局字符串查找)
string.gmatch(返回查找到字符串的迭代器)
]]
-- string.gmatch(str, pattern) 返回一个迭代器函数
local s = "hello world from Lua"
for w in string.gmatch(s,"%a+") do
print(w)
end
local s1 = "hello=123 123=hello"
for w,s in string.gmatch(s1,"(%d+)=(%a+)") do
print(w,s)
end
--[[
string.gsub(str, pattern, repl, n)
string.gsub()函数根据给定的配对表达式对源字符串str进行配对, 同时返回源字符串的一个副本, 该副本中成功配对的所有子字符串都将被替换.
函数还将返回成功配对的次数.实际的替换行为由repl参数的类型决定:
当repl为字符串时, 所有成功配对的子字符串均会被替换成指定的repl字串.
当repl为table时, 对每个成功配对的子字符串, 函数均会试图寻找以其为key值的table中的元素, 并返回该元素.
如果该配对包含任何捕获信息, 则以编号为1号的捕获作为key值进行查找.
当repl为函数时, 每个成功配对的子字符串均会作为参数被传入到该函数中去.
在repl是table时, 如果该table返回了字串或数字的值, 这个值依然会被用于替换副本字串中的配对子字串.
如果该table/函数返回的值为空, 将不发生替换.
n参数可选, 当它被指定时, string.gsub()函数只对源字符串中的前n个成功配对的成员进行操作.
]]
--当repl为字符串时
--当只匹配一个字符串时
local s2 = "hello world"
print(string.gsub(s2,"(%w+)","%1 %1")) --这里每次只会匹配到一个字符串 所以替换成 两个一样的字符
print(string.gsub(s2,"(%w+)","%1+%1+%1")) --扩展
--当匹配两个字符串时
print(string.gsub(s2,"(%w+)%s*(%w+)","%2+%1")) --每次匹配到两个字符串 替换成%2+%1 %2是第二个字符串 %1是第一个字符串
--当repl为函数时
string.gsub(s2, "%w+", function ( word ) --返回一个参数
print(word)
end)
string.gsub(s2,"(%w+)%s*(%w+)",function ( word1,word2 ) --返回两个参数
-- print(string.len(word1),string.len(word2))
print(word1,word2)
end)
--当repl为table时
local temp = {
hello = "hi",
-- world = "city"
}
print(string.gsub(s2,"(%w+)",temp))
--[[
string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1.
在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil.
]]
print(string.match(s2,"(%w+)",1))
print(string.match("hessss","he%w+",1))
--[[
string.find(str, pattern, init, plain)
string.find的基本应用就是用来在目标串(subject string)内搜索匹配指定的模式的串。
函数如果找到匹配的串返回他的位置,否则返回nil.最简单的模式就是一个单词,仅仅匹配单词本身。
比如,模式'hello'仅仅匹配目标串中的"hello"。当查找到模式的时候,函数返回两个值:匹配串开始索引和结束索引
]]
print(string.find(s2,"e%w+"))
-- string.find(s, "hello") --> 1 5
-- string.find(s, "world") --> 7 11
-- string.find(s, "l") --> 3 3
-- string.find(s, "lll") --> nil
local pos1 = 1
--循环查找
while true do
pos1,pos2 = string.find("hello hello","e%w+",pos1)
-- print(pos1,pos2)
if not pos1 then break end
pos1 = pos2 + 1
end
--[[
string.sub(str,sPos,ePos)
string.gsub的功能是截取字符串,他从指定起始位置截取一个字符串。string.sub可以利用string.find返回的值截取匹配的子串。
对简单模式而言,匹配的就是其本身
]]
-- s = "hello world"
local i, j = string.find(s2, "hello") --> 1 5
print(string.sub(s, i, j)) --> hello
lua 正则表达式
最新推荐文章于 2024-04-23 02:09:05 发布