gpt4 book ai didi

lua - 不区分大小写的 Lua 模式匹配

转载 作者:行者123 更新时间:2023-12-04 02:05:43 28 4
gpt4 key购买 nike

我正在为运行 Windows CE 6/7 的移动设备编写 Lua 中的 grep 实用程序,但在实现不区分大小写的匹配模式时遇到了一些问题。由于字符类的原因,将所有内容转换为大写(或小写)的明显解决方案并不那么简单。

我能想到的唯一另一件事是将模式本身中的文字转换为大写。

这是我到目前为止所拥有的:

function toUpperPattern(instr)
-- Check first character
if string.find(instr, "^%l") then
instr = string.upper(string.sub(instr, 1, 1)) .. string.sub(instr, 2)
end
-- Check the rest of the pattern
while 1 do
local a, b, str = string.find(instr, "[^%%](%l+)")
if not a then break end
if str then
instr = string.sub(instr, 1, a) .. string.upper(string.sub(instr, a+1, b)) .. string.sub(instr, b + 1)
end
end
return instr
end

我不愿意承认达到那么远需要多长时间,而且我仍然可以立即看到存在诸如转义百分号“%%”之类的问题

我认为这一定是一个相当普遍的问题,但我似乎找不到关于该主题的太多内容。
有没有更简单(或至少完整)的方法来做到这一点?我在这里开始发疯了......
希望各位Lua大师能指教我!

最佳答案

尝试这样的事情:

function case_insensitive_pattern(pattern)

-- find an optional '%' (group 1) followed by any character (group 2)
local p = pattern:gsub("(%%?)(.)", function(percent, letter)

if percent ~= "" or not letter:match("%a") then
-- if the '%' matched, or `letter` is not a letter, return "as is"
return percent .. letter
else
-- else, return a case-insensitive character class of the matched letter
return string.format("[%s%s]", letter:lower(), letter:upper())
end

end)

return p
end

print(case_insensitive_pattern("xyz = %d+ or %% end"))

打印:

[xX][yY][zZ] = %d+ [oO][rR] %% [eE][nN][dD]

关于lua - 不区分大小写的 Lua 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401890/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com