求教,能否在string.find()的第二个参数中实现“或”运算
本帖最后由 shenji 于 2022-7-1 12:37 AM 编辑比如说想做一个存东西的触发
match: ^(你\S+搜出|从\S+身上掉了出来|\S+拿出|\S+拿出了|你\S+起|\S+给你)一(颗|枚)(.*)$
send:if string.find("%3", "★") or string.find("%3", "☆") or string.find("%3", "◎") then
Send("pack gem")
elseif string.find("%3", "丹") then
Send("put dan in bao")
elseif string.find("%3", "菩提子") then
Send("put zi in bao")
end
能否把这两个or的判断放在同一个string.find()中,类似:if string.find("%2", "★" or "☆" or "◎")
代码复制粘贴会被吞掉吗。。 Lua本质是一个不适合做mud机器的语言的重要原因就是糟糕的文字处理。
因此,做lua机器牢记一点,能用正则的尽量用正则。 jarlyyn 发表于 2022-7-1 03:22 AM
Lua本质是一个不适合做mud机器的语言的重要原因就是糟糕的文字处理。
因此,做lua机器牢记一点,能用正则的 ...
好吧,谢谢大佬yct39.
话说。。这是起来了还是还没睡呢 不能。我今天刚问过了。 nox 发表于 2022-7-1 03:31 AM
不能。我今天刚问过了。
sigh Limitations of Lua patterns
Especially if you're used to other languages with regular expressions, you might expect to be able to do stuff like this:
'(foo)+' -- match the string "foo" repeated one or more times
'(foo|bar)' -- match either the string "foo" or the string "bar"
Unfortunately Lua patterns do not support this, only single characters can be repeated or chosen between, not sub-patterns or strings. The solution is to either use multiple patterns and write some custom logic, use a regular expression library like lrexlib or Lua PCRE, or use LPeg . LPeg is a powerful text parsing library for Lua based on Parsing Expression Grammar . It offers functions to create and combine patterns in Lua code, and also a language somewhat like Lua patterns or regular expressions to conveniently create small parsers.
Lua特别说明的,不行。 用string.match 可以加正则匹配。自己搜索一下用法吧,不过Lua的正则貌似有点儿奇怪 自己写一个就好啦
string.has = function(str, findthis)
if string.find(findthis, "|") == nil then
return string.find(str, findthis) ~= nil
else
local findall = split(findthis, "|")
for k, v in pairs(findall) do
if string.find(str, v) ~= nil then
return true
end
end
return false
end
end ppmm 发表于 2022-7-1 09:13 AM
用string.match 可以加正则匹配。自己搜索一下用法吧,不过Lua的正则貌似有点儿奇怪 ...
感谢指路,我找到了lua一个能自定义匹配字符的正则[]
macth: ^你说道:「(.*)」$
send:
if string.match("%1","[◎,☆,★]") then---- string.find()也可以
Note("匹配成功")
end
实例:
你说道:「☆」
匹配成功
你说道:「★」
匹配成功
你说道:「☆★」
匹配成功
页:
[1]
2