hba 发表于 2010-7-24 11:52:43

【Lua】请教解法

是否有函数抓取并叠加某些指定的字符?

比如说:
六十六粒养精丹(Yangjing dan)

用string.find可以识别:
if string.find("一|二|三|四|五|六|七|八|九|十|百",wildcards) ~= nil then
end

但如何抓取“六十六”呢?
复杂一点的解法可能可以做到,但是否有简便的函数呢?

killunix 发表于 2010-7-24 12:31:06

日,你把六十六全抓下来,再转成数字不就完了

lzkd 发表于 2010-7-24 12:42:07

helllua里提供一个算法的.
是把"粒"前面的内容抓下来再转换......
然后那个里面整了粒,颗,把,个....N多一大串,经我的拣垃圾机器人试验,除了五香花生搞不定,别的北侠物品都可以搞定.我记得是在system模块

killunix 发表于 2010-7-24 12:56:16

http://www.pkuxkx.com/forum/viewthread.php?tid=11586&highlight=%2Bsauron
here

dinglf 发表于 2010-7-24 13:47:59

ttk_09

hba 发表于 2010-7-24 15:40:21

楼上几位可能没理解我的做法。
看看我的正则:
^(.+)\((.+)\)$

killunix 发表于 2010-7-24 15:59:16

不明白你在说什么

hba 发表于 2010-7-24 18:02:26

原帖由 killunix 于 2010-7-24 15:59 发表 http://www.pkuxkx.com/forum/images/common/back.gif
不明白你在说什么

按照我贴出来的正则,你怎么抓“六十六”这些数字出来?
不要用其他正则,其他正则的方式我知道怎么解,我需要知道的是按这个正则怎么简便的抓数字出来。

seagate 发表于 2010-7-24 20:08:21

按照这个正则你要解析出数字,首先你取出六十六粒养精丹以后肯定需要下一个正则或者其他方式把粒和养精丹剔除掉,正则最简单。

hba 发表于 2010-7-24 23:59:21

只好自己动手了。搞了好久,发现lua和汉字是有点不兼容的,又弄了些取巧的办法。

function on_item1 (name, line, wildcards)
    local number = 1
if string.find("一|二|三|四|五|六|七|八|九|十", string.sub(wildcards, 1, 1)) ~= nil then
number = ctonum(string.sub(wildcards, 1, string.len(wildcards)))
ArraySet ("item", string.lower(wildcards), number)
else
   ArraySet ("item", string.lower(wildcards), 1)
end
end


效果:
waist 1
silver 51
bingpo zhang 1
sword 1
gan liang 10
gold 29
armor 1
boots 1
ring 1
blade 1
jiudai 8
head 1
staff 1
yangjing dan 66
necklace 1
wrists 1
surcoat 1
cloth 1
coin 12
hands 1
jinchuang yao 99
页: [1] 2
查看完整版本: 【Lua】请教解法