设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2260|回复: 3
打印 上一主题 下一主题

[已经解决] 请问:这个正则表达式匹配什么?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3970
在线时间
254 小时
注册时间
2013-10-13
帖子
794
跳转到指定楼层
1
发表于 2021-2-28 15:59:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
请问:这个正则表达式匹配
text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }

请问:$1 匹配 哪个正则表达式,或者等于哪个正则表达式?
$1 =~ /\\[Vv]\[([0-9]+)\]/ 或者 $1 == /\\[Vv]\[([0-9]+)\]/?

请问$1到底匹配什么?

Lv5.捕梦者

梦石
10
星屑
39445
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

2
发表于 2021-2-28 17:01:16 | 只看该作者
本帖最后由 KB.Driver 于 2021-2-28 17:04 编辑

$1是一种简便写法,含义是上一次匹配的第一个捕获分组数据
完整写法是Regexp.last_match[1]
如果匹配不成功,或者正则中没有捕获分组,会得到nil

在这里,正则中只有一个捕获分组,捕获的内容是1个或以上的数字。
可以系统地学习一下正则的语法,捕获分组是一对圆括号()包裹的内容。

---

至于后面的问题,不是那样写的。
ruby中正则的一种标准写法是
md = text.match(regexp)
md[1] # 第一个捕获分组

但是为了代码的简短,可以不主动赋值给md,也不使用match方法,而是用String的=~操作符
例如:
text =~ regexp
$1 # 效果与上面的md[1]相同

第二种写法在读取备注的脚本中常常见到,例如给装备添加备注改变普通攻击的技能,需要读取正则时可以这样写
if self.note =~ /<skill_id:\s*(\d+)>/
  return $1.to_i
end

评分

参与人数 1星屑 +70 收起 理由
RyanBern + 70 认可答案

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22497
在线时间
2338 小时
注册时间
2005-10-15
帖子
1160

开拓者

3
发表于 2021-2-28 17:04:12 | 只看该作者
text.gsub!(/\\[Vv]\[([0-9]+)\]/)

这个用括号括起来的部分,就是$1的所指,如果你有很多个括号,可以用$2, $3...以此类推

点评

虽然不懂,但还是谢谢  发表于 2021-3-1 15:24

评分

参与人数 1星屑 +20 收起 理由
RyanBern + 20 我很赞同

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-10 18:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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