查看: 3040|回复: 7

[已经解决] 正则text.gsub!这段代码具体是什么意思?

[复制链接]
梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

发表于 2019-3-25 19:10:46 | 显示全部楼层 |阅读模式

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

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

×
谁能帮我解读下,看了一些正则基础也理解不透这块。
text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
\\      :相当于\
+      :重复一次或更多次
[0-9] :代表0-9任意一个数字
我只明白这点,剩下的,就不怎么清楚了,
我看教程里面text.gsub(/正则表达式/,"替换字符")
如:p "\n".gsub(/^/,"o") #=> "o\n"

但是RGSS(截图里面的)里面这种写法我就不明白了
text.gusb!(/正则表达式/)){}上面是这个格式,

我暂时能解读的是text文本当中匹配\[Cc]接着中括号0-9任意一个数字1个或1个以上,后面大括号就不明白了。
1.png
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2019-3-25 19:30:20 | 显示全部楼层
这是 gsub! 的另一种用法。
[pre lang="Ruby"]text.gsub!(pattern) {|match| block}[/pre]

只有一个正则表达式 pattern 作为参数,后面的 {} 表示的是代码块,代码块的返回值作为实际用于替换的内容。引入代码块的意义在于可以使得要替换的内容更加灵活。因此这段
[pre lang="Ruby"]text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]"}[/pre]
的含义为:替换 \c[数字] 为 \001[数字],在这里 $1 是个特殊的变量,来表示正则表达式中第一个括号里的实际内容(在这里是 [0-9]+)

注意:不能写成 text.gsub!(/\\[Cc]\[([0-9]+)\]/, "\001[#{$1}]"),请思考原因。

点评

调皮!我正在学习和思考中!  发表于 2019-3-25 21:18

评分

参与人数 2星屑 +50 赞 +2 收起 理由
fux2 + 1 无敌的rb酥酥
guoxiaomi + 50 + 1 不想思考

查看全部评分

回复

使用道具 举报

梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

 楼主| 发表于 2019-3-25 21:35:51 | 显示全部楼层
本帖最后由 miantouchi 于 2019-3-25 21:37 编辑
RyanBern 发表于 2019-3-25 19:30
这是 gsub! 的另一种用法。
text.gsub!(pattern) {|match| block}[/pre]


换成你给的这个代码,$1这个值就会变成空的,[]里面会替换为空了,我只能从现象里发现不一样的地方。具体原因还是不是太清楚了。
11.png

点评

哦,这样啊,之前也看了,就是没对上号,到底说的是哪里。  发表于 2019-3-26 21:38
F1就有提到了"与没带块时不同的是,可以在块中调用内部变量 $<digits>", 所以没带块的gsub, 是无法调用$1这个内部变量的  发表于 2019-3-26 14:45
回复

使用道具 举报

梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2019-3-25 22:35:54 | 显示全部楼层
miantouchi 发表于 2019-3-25 21:35
换成你给的这个代码,$1这个值就会变成空的,[]里面会替换为空了,我只能从现象里发现不一样的地方。具体 ...

会不会里面的值被吸掉了

点评

吸星大法?  发表于 2019-3-25 22:44
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部