扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 141|回复: 0

[转载发布] 水蓝的脚本教程之正则表达式

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10622
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13391

    灌水之王

    发表于 2024-4-19 16:07:04 | 显示全部楼层 |阅读模式
    此教程是写给和我一样的新人,高手直接54就好 >_<

    什么是正则表达式呢?
    我的理解就是用简洁的语句来实现模式串匹配,不用自己写一大段代码去实现 = =

    大家刚开始去接触正则表达式的时候,会觉得这些表达式非常难以理解,不知道在写些什么
    但看懂后,会觉得非常简单

    现在就来讲怎么来使用,下面讲两个比较简单和常用的
    string[/self/]
    当string 含有 self 的时候 返回self
    这个用来搜索string中是否含有模式串

    str = "foofoofoo"
    p str[/foo/]  #=>"foo"

    self =~ string
    与 string 字符串进行正则表达式的匹配操作。
    返回index

    p "foo" =~ /foo/ #=>0
    还有的方法请参考Regexp类,相信不难理解


    接下来就是此讲的重点和难点了,大家要听好了
    先看下面的一些语句

    "foo" =~ /foo/
    "md123556cd324dsw241" =~ /md(\d+)cd(\d+)dsw(\d+)/
    "v[1]" =~ /\\[Vv]\[([0-9]+)\]/

    是不是有点晕,稳住,咱来一条一条慢慢讲

    首先,//之间的就是要匹配的string,第一个的foo就是要匹配的string
    但后面几个就出现很多看不懂的符号 = =

    这些看不懂的符号就是ruby支持的正则表达式符号(元字符)
    有这么个规则:
    不带\的数字和字母不是元字符
    带\的符号也不是元字符

    元字符进行匹配的时候,不是直接用指定的string来匹配,而是用元字符代表的范围来进行范围匹配

    下面就是一些比较常见的元字符的意义
    更多的规则请参看f1 or 参考手册

    \w
    匹配包括下划线的任何字母数字字符。等同于[0-9A-Za-z_]。
    中文的全角字符也匹配。

    \W
    匹配任何非字母数字字符。\w 以外的字符。

    \s
    匹配任何空字符,包括空格、制表符、换页符等等。等同于[ \t\n\r\f\v]。

      \S
    匹配任何非空字符。[ \t\n\r\f\v]以外的字符。

    \d
    匹配一个数字字符。等同于[0-9]。

    \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根据上面的元字符的讲解就是 匹配一个数字字符,等同于[0-9]
      d后面的+号指的是前面的表达式(也就是数字)至少出现一次
      最后来讲这个括号,()并不能进行匹配,但可以在匹配成功后,抽出匹配部分并存在$1,$2.....中
      所以当你p $1,$2,$3 的时候,显示出来的是123556,324,241

      再看下一个/\\[Vv]\[([0-9]+)\]/
      \\前面的一个\是转义,匹配的是\这个符号
      后面的 [ 和 ] 前面的\也是转义,匹配的是[ 和 ]这两个符号
      [Vv] [0 - 9] 正则表达式 [] 负责指定字符簇,这将匹配 [] 内列出的任何一个字符
      Vv匹配 V or v [0 - 9 ] 匹配 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在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-15 00:11 , Processed in 0.134167 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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