Lua 中的重复正则表达式
Repetitive regular expression in Lua
我需要找到 6 对十六进制数的模式(不带 0x),例如。
“00 5a 4f 23 aa 89”
这个模式对我有用,但问题是有没有办法简化它?
[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]
Lua supports %x
用于十六进制数字,因此您可以将所有 [%da-f]
替换为 %x
:
%x%x%s%x%x%s%x%x%s%x%x%s%x%x%s%x%x
Lua 不支持特定量词 {n}
。如果是这样,您可以将其缩短很多。
以及正则表达式支持的更多功能(因此,Lua 模式甚至不是正则表达式)。
您可以动态构建模式,因为您知道需要重复多少次模式的一部分:
local text = '00 5a 4f 23 aa 89'
local answer = text:match('[%da-f][%da-f]'..('%s[%da-f][%da-f]'):rep(5) )
print (answer)
-- => 00 5a 4f 23 aa 89
参见Lua demo。
'[%da-f][%da-f]'..('%s[%da-f][%da-f]'):rep(5)
可以进一步缩短 %x
十六进制字符 shorthand:
'%x%x'..('%s%x%x'):rep(5)
您也可以使用带有加号的“一个或多个”来缩短...
print(('Your MAC is: 00 5a 4f 23 aa 89'):match('%x+%s%x+%s%x+%s%x+%s%x+%s%x+'))
-- Tested in Lua 5.1 up to 5.4
在...
中的“模式项:”下进行了描述
https://www.lua.org/manual/5.4/manual.html#6.4.1
最终解决方案:
local text = '00 5a 4f 23 aa 89'
local pattern = '%x%x'..('%s%x%x'):rep(5)
local answer = text:match(pattern)
print (answer)
我需要找到 6 对十六进制数的模式(不带 0x),例如。 “00 5a 4f 23 aa 89”
这个模式对我有用,但问题是有没有办法简化它?
[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]%s[%da-f][%da-f]
Lua supports %x
用于十六进制数字,因此您可以将所有 [%da-f]
替换为 %x
:
%x%x%s%x%x%s%x%x%s%x%x%s%x%x%s%x%x
Lua 不支持特定量词 {n}
。如果是这样,您可以将其缩短很多。
您可以动态构建模式,因为您知道需要重复多少次模式的一部分:
local text = '00 5a 4f 23 aa 89'
local answer = text:match('[%da-f][%da-f]'..('%s[%da-f][%da-f]'):rep(5) )
print (answer)
-- => 00 5a 4f 23 aa 89
参见Lua demo。
'[%da-f][%da-f]'..('%s[%da-f][%da-f]'):rep(5)
可以进一步缩短 %x
十六进制字符 shorthand:
'%x%x'..('%s%x%x'):rep(5)
您也可以使用带有加号的“一个或多个”来缩短...
print(('Your MAC is: 00 5a 4f 23 aa 89'):match('%x+%s%x+%s%x+%s%x+%s%x+%s%x+'))
-- Tested in Lua 5.1 up to 5.4
在...
中的“模式项:”下进行了描述
https://www.lua.org/manual/5.4/manual.html#6.4.1
最终解决方案:
local text = '00 5a 4f 23 aa 89'
local pattern = '%x%x'..('%s%x%x'):rep(5)
local answer = text:match(pattern)
print (answer)