使用string.gsub
、string.gmatch
此类接口进行匹配字符串时
示例代码
local str = "#普通文本:<#选中内容#><<#示例文本#>>"
string.gsub(str, "[^<#|#>]+", function(w) --分割字符串
print("all---"..w)
end);
string.gsub(str, "<#.-#>", function(w) --匹配字符串
print("gsub---"..string.gsub(w, "[<#|#>]", ""))
end);
for w in string.gmatch(str, "<#.-#>") do --匹配字符串
print("gamtch---"..string.gsub(w, "[<#|#>]", ""))
end
输出
all---普通文本:
all---选中内容
all---示例文本
gsub---选中内容
gsub---示例文本
gamtch---选中内容
gamtch---示例文本
特殊字符分割字符串
local strTaskId = "71,72,"
if strTaskId~=nil and strTaskId~="" then
string.gsub(strTaskId, "[^',']+", function(w)
print(w)
end);
end
字符串匹配查找
local strDate = "2019/06/27 19:48:57"
local _, _, y, m, d, _hour, _min, _sec = string.find(strDate, "(%d+)/(%d+)/(%d+)%s*(%d+):(%d+):(%d+)");
print(y);
print(m);
print(d);
print(_hour);
print(_min);
print(_sec);
--转化为时间戳
local timestamp = os.time({year=y, month = m, day = d, hour = _hour, min = _min, sec = _sec});
print("timestamp = ", timestamp);
千分位分割
function formatnumberthousands(num)
local function checknumber(value)
return tonumber(value) or 0
end
local formatted = tostring(checknumber(num))
local k
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if k == 0 then
break end
end
return formatted
end
字符 | 匹配 |
---|---|
. | 任意字符 |
%a | 字母 |
%c | 控制字符 |
%d | 数字 |
%l | 小写字母 |
%p | 标点字符 |
%s | 空白符 |
%u | 大写字母 |
%w | 字母和数字 |
%x | 十六进制数字 |
%z | 代表0的字符 |
上面字符类的大写形式表示小写所代表的集合的补集 | 例如, '%A’非字母的字符 |
模式串中的特殊字符
( ) . % + - * ? [ ^ $
% | 转义 |
---|---|
‘%’ | 用作特殊字符的转义字符 |
‘%.’ | 匹配点; |
‘%%’ | 匹配字符 ‘%’。 |
转义字符 '%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。
‘[%w_]’ | 匹配字母数字和下划线 |
‘[01]’ | 匹配二进制数字 |
‘[%[%]]’ | 匹配一对方括号 |
在’[]‘中使用连字符’-’ | |
‘%d’ | 表示 ‘[0-9]’; |
‘%x’ | 表示 ‘[0-9a-fA-F]’ |
‘[0-7]’ | 表示 ‘[01234567]’ |
在’[]'开始处使用 ‘^’ 表示其补集: | |
‘[^0-7]’ | 匹配任何不是八进制数字的字符; |
‘[^\n]’ | 匹配任何非换行符户的字符。 |
‘[^%s]’ | == ‘%S’ |
模式修饰符
+ | 匹配前一字符1次或多次 |
* | 匹配前一字符0次或多次;最长匹配 |
- | 匹配前一字符0次或多次;最短匹配 |
? | 匹配前一字符0次或1次 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
关于正则表达式:正则表达式30分钟入门教程
更通俗版本:你是如何学会正则表达式的
关于使用字符串操作接口示例:Lua将屏蔽字替换为’*’