Project1

标题: 请教下sub!的用法 [打印本页]

作者: wwwcctvty    时间: 2013-8-8 19:09
标题: 请教下sub!的用法
本帖最后由 wwwcctvty 于 2013-8-8 20:59 编辑

info.sub!(/(a=)(.+)$/i){""}请高手帮解释下
如果要把文本内容:“a=1,2,3,\n4,5\nb=1,2,3,\n4,5\nc=1,2,\n3”
转换成三个数组:
[1,2,3,4,5]
[1,2,3,4]
[1,2,3]
应该怎样写
作者: fux4    时间: 2013-8-8 20:57
你先确定n前面是不是反斜杠
作者: Algalon    时间: 2013-8-8 23:21
建议先去学下ruby的正则式。sub!用法很简单,跟sub一样如果后面跟一个正则式一个block那么在call block的时候把你要替换的string里匹配正则式中的内容用block里的string替换掉,然后返回一个新的string。唯一的区别是sub!在未替换(也就是不包含)的时候将会返回nil
作者: Algalon    时间: 2013-8-9 02:47
简单的说就是你只要记住"//"里是要匹配的内容,也就是匹配"a="这个string,"//"外称为modifier你可以把它看成一个特殊匹配标记,这里i表示忽略大小写。
美元号$的意思是匹配行末,也就是说只要在 a= 之后发现行末就停止匹配。用括号括起来的称为捕捉,捕捉的内容可以被当成组(array)来使用。这边捕捉的是a=和紧跟a=之后的那个词。
例如你的string是a=5,那么(a=)捕捉a=,而(.+)捕捉5。要注意+号表示a=后至少必须有一个跟随,也就是说如果捕捉对象是"a="那么返回的就是nil nil
你可以试试:
line_sub = Proc.new {|capture| capture.sub! (/(a=)(.+)$/i) {""}}
str1, str2 = line_sub.call ("a=5")

p str1
p str2

--> ""
--> nil
作者: wwwcctvty    时间: 2013-8-9 12:01
Algalon 发表于 2013-8-9 02:47
简单的说就是你只要记住"//"里是要匹配的内容,也就是匹配"a="这个string,"//"外称为modifier你可以把它看 ...


可不可以让它匹配到指定字符
作者: 弗雷德    时间: 2013-8-9 12:32
没@到,另外正则表达式莫问俺,各种符号自己也是看的云里雾里的,俺能想到的就是用gusb \D/ 什么的先空字符匹配掉字母换行符什么,之后重新在=前插入换行符,最后逐一读取,虽然麻烦,但能实现,sub的话,F1里没有详细的介绍,一直不懂怎么用。
最后:俺美工技能练的比较高,脚本的算法、网络相关、文件结构神马的都还没学到。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1