gpt4 book ai didi

lua - 模式 ^u.meta(\.|$) 未按预期工作

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

我有这个模式:

^u.meta(\.|$)

预期行为

^u.meta(\.|$) 将匹配所有角色,例如:

u.meta
u.meta.admin
u.meta.admin.system
u.meta.*

它不应该匹配以下内容的地方:

u.meta_admin
u.meta_admin_system

我用 https://regex101.com/ 测试了这个模式在线 正则表达式测试器

问题:

我必须使用 lua 脚本来实现这个模式。但得到 '\.' 附近的无效转义序列:

-- lua script

> return string.match("u.meta.admin", '^u.meta(\.|$)')
stdin:1: invalid escape sequence near '\.'

我尝试在该正则表达式中添加双 \\ 以及删除 '\' 转义字符,但得到的是 nil:

-- lua script

> return string.match("u.meta.admin", '^u.meta(\\.|$)')
nil

> return string.match("u.meta.admin", '^u.meta(.|$)')
nil

最佳答案

参见 Lua regex docs :

The character % works as an escape for those magic characters.

此外,Lua 不支持 (...|...) 交替。相反,我想,你需要一个单词边界,比如 %f[set] frontier pattern :

%f[set], a frontier pattern; such item matches an empty string at any position such that the next character belongs to set and the previous character does not belong to set. The set set is interpreted as previously described. The beginning and the end of the subject are handled as if they were the character \0.

所以,你可以使用

return string.match("u.meta.admin", '^u%.meta%f[%A]')

仅在 的末尾或之前匹配。:

return string.match("u.meta", '^u%.meta%f[\0.]')

要仅在 admin 后跟字母或下划线时才匹配,请使用取反字符类 [^%a_]:

return string.match("u.meta_admin", '^u%.meta%f[[^%a_]]')

参见 IDEONE demo to check the difference between the two expressions .

print(string.match("u.meta", '^u%.meta%f[\0.]')) -- u.meta
print(string.match("u.meta.admin", '^u%.meta%f[\0.]')) -- u.meta
print(string.match("u.meta-admin", '^u%.meta%f[\0.]')) -- nil
print(string.match("u.meta", '^u%.meta%f[%A]')) -- u.meta
print(string.match("u.meta.admin", '^u%.meta%f[%A]')) -- u.meta
print(string.match("u.meta-admin", '^u%.meta%f[%A]')) -- u.meta
-- To exclude a match if `u.admin` is followed with `_`:
print(string.match("u.meta_admin", '^u%.meta%f[[^%a_]]')) -- nil

注意 要匹配字符串的结尾,而不是 \0,您可以安全地使用 %z(如 @moteus noted in his comment) (参见 this reference):

%z    the character with representation 0

关于lua - 模式 ^u.meta(\.|$) 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35012081/

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