水蓝的脚本教程之正则表达式
此教程是写给和我一样的新人,高手直接54就好 >_<什么是正则表达式呢?
我的理解就是用简洁的语句来实现模式串匹配,不用自己写一大段代码去实现 = =
大家刚开始去接触正则表达式的时候,会觉得这些表达式非常难以理解,不知道在写些什么
但看懂后,会觉得非常简单
现在就来讲怎么来使用,下面讲两个比较简单和常用的
string
当string 含有 self 的时候 返回self
这个用来搜索string中是否含有模式串
str = "foofoofoo"
p str#=>"foo"
self =~ string
与 string 字符串进行正则表达式的匹配操作。
返回index
p "foo" =~ /foo/ #=>0
还有的方法请参考Regexp类,相信不难理解
接下来就是此讲的重点和难点了,大家要听好了
先看下面的一些语句
"foo" =~ /foo/
"md123556cd324dsw241" =~ /md(\d+)cd(\d+)dsw(\d+)/
"v" =~ /\\\[(+)\]/
是不是有点晕,稳住,咱来一条一条慢慢讲
首先,//之间的就是要匹配的string,第一个的foo就是要匹配的string
但后面几个就出现很多看不懂的符号 = =
这些看不懂的符号就是ruby支持的正则表达式符号(元字符)
有这么个规则:
不带\的数字和字母不是元字符
带\的符号也不是元字符
元字符进行匹配的时候,不是直接用指定的string来匹配,而是用元字符代表的范围来进行范围匹配
下面就是一些比较常见的元字符的意义
更多的规则请参看f1 or 参考手册
\w
匹配包括下划线的任何字母数字字符。等同于。
中文的全角字符也匹配。
\W
匹配任何非字母数字字符。\w 以外的字符。
\s
匹配任何空字符,包括空格、制表符、换页符等等。等同于[ \t\n\r\f\v]。
\S
匹配任何非空字符。[ \t\n\r\f\v]以外的字符。
\d
匹配一个数字字符。等同于。
\D
匹配一个非数字字符。
+
负责指定数量(quantifiers)。表示前面子表达式至少出现 1 次
+?
负责指定数量(quantifiers)。表示前面子表达式至少出现 1 次(尽量匹配短的部分)。
{m}
{m,}
{m,n}
指定子表达式重复出现的次数(interval quantifier)。分别表示前面子表达式重复出现
m 次
至少 m 次
至少 m 次,至多 n 次
有了上面的基础作为铺垫,继续看/\md(\d+)cd(\d+)dsw(\d+)/
md,cd,dsw 就是匹配 md,cd,dsw
\d根据上面的元字符的讲解就是 匹配一个数字字符,等同于
d后面的+号指的是前面的表达式(也就是数字)至少出现一次
最后来讲这个括号,()并不能进行匹配,但可以在匹配成功后,抽出匹配部分并存在$1,$2.....中
所以当你p $1,$2,$3 的时候,显示出来的是123556,324,241
再看下一个/\\\[(+)\]/
\\前面的一个\是转义,匹配的是\这个符号
后面的 [ 和 ] 前面的\也是转义,匹配的是[ 和 ]这两个符号
正则表达式 [] 负责指定字符簇,这将匹配 [] 内列出的任何一个字符
Vv匹配 V or v 匹配 0 -9 (加入- 必须按照ascii码)
()的意思在上面已经讲了 ,+号就是前面的数字可以出现一次或多次,1,25这样都行
有兴趣的话,还可以看一下 window_message中的正则,这个就是从那里面选出来的
写了这么多,不知道大家看懂没有,下面留个作业 = =bbb
很简单,大家不妨一试
提取[]中的内容
"" ==>["actor1",0,0,2]
参考答案(此问题来自vx提问区)
本帖来自P1论坛作者dbshy,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=108218若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]