北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
12
返回列表 发新帖
楼主: shenji

求教,能否在string.find()的第二个参数中实现“或”运算

[复制链接]
 楼主| 发表于 2022-7-4 00:03:14 | 显示全部楼层
suwuji 发表于 2022-7-3 06:58 AM
自己写一个就好啦

string.has = function(str, findthis)

结合最近看制作推车机器人视频学到的微薄知识,竟然看懂了大佬的意思,妙哇虽然lua没有split函数,要自己定义(但我推车脚本有写了。flee)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2022-7-4 00:07:01 | 显示全部楼层
shenji 发表于 2022-7-3 11:50 PM
感谢指路,我找到了lua一个能自定义匹配字符的正则  []

macth: ^你说道:「(.*)」$

这条不是正路,原因是[]匹配的是单字符
这里一定要注意 是 单个字符
而汉字,包括这个例子中的星星都是双字符
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2022-7-4 00:41:43 | 显示全部楼层
creat 发表于 2022-7-4 12:07 AM
这条不是正路,原因是[]匹配的是单字符
这里一定要注意 是 单个字符
而汉字,包括这个例子中的星星都是双 ...

但是还是成功匹配了,什么情况下会出错呢,或者说这样有啥隐患?

我试了一下:

match:^你说道:「(.*)」$
send:
if string.find("%1","[我们,你好,1,abcdefg]") then
   Note("匹配成功")
end

>
你说道:「我们」
匹配成功
>
你说道:「你好」
匹配成功
>
你说道:「1」
匹配成功
>
你说道:「abcdefg」
匹配成功
>

--------------------------------------------

我又试了一下,好像是调用匹配的内容的时候会出问题

match:^你说道:「(.*)」$
send:
for v in string.gmatch("%1","[我们,你好,1,abcdefg]") do
   print(v)
end

你说道:「abcdefg」
a
b
c
d
e
f
g

你说道:「我们」
?
?
?
?

所以单纯匹配返回true值还是可以用[]的吧
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2022-7-4 01:00:19 | 显示全部楼层
不要用方括号,用竖线就可以了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2022-7-4 08:07:07 | 显示全部楼层
shenji 发表于 2022-7-4 12:41 AM
但是还是成功匹配了,什么情况下会出错呢,或者说这样有啥隐患?

我试了一下:

简单的说,[]只适合字母和半角符号
如果没有充分的理解,那么在ansi编码的中文处理中不要用,不要用,不要用
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2022-7-4 08:32:28 | 显示全部楼层
shenji 发表于 2022-7-4 12:41 AM
但是还是成功匹配了,什么情况下会出错呢,或者说这样有啥隐患?

我试了一下:

当你了解了什么是gbk,什么是utf8,什么是ansic
一个中文到底可能是几位后。
欢迎你和我一起对lua骂 mmp

lua本身不是用来处理文字的,这是它弱项。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-12-27 11:21 PM , Processed in 0.010615 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表