Project1

标题: 正则text.gsub!这段代码具体是什么意思? [打印本页]

作者: miantouchi    时间: 2019-3-25 19:10
标题: 正则text.gsub!这段代码具体是什么意思?
谁能帮我解读下,看了一些正则基础也理解不透这块。
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 (55.29 KB, 下载次数: 11)

1.png

作者: RyanBern    时间: 2019-3-25 19:30
这是 gsub! 的另一种用法。
RUBY 代码复制
  1. text.gsub!(pattern) {|match| block}


只有一个正则表达式 pattern 作为参数,后面的 {} 表示的是代码块,代码块的返回值作为实际用于替换的内容。引入代码块的意义在于可以使得要替换的内容更加灵活。因此这段
RUBY 代码复制
  1. text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]"}

的含义为:替换 \c[数字]\001[数字],在这里 $1 是个特殊的变量,来表示正则表达式中第一个括号里的实际内容(在这里是 [0-9]+)

注意:不能写成 text.gsub!(/\\[Cc]\[([0-9]+)\]/, "\001[#{$1}]"),请思考原因。
作者: miantouchi    时间: 2019-3-25 21:35
本帖最后由 miantouchi 于 2019-3-25 21:37 编辑
RyanBern 发表于 2019-3-25 19:30
这是 gsub! 的另一种用法。
text.gsub!(pattern) {|match| block}[/pre]


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

11.png (73.09 KB, 下载次数: 15)

11.png

作者: ppspssss    时间: 2019-3-25 22:35
miantouchi 发表于 2019-3-25 21:35
换成你给的这个代码,$1这个值就会变成空的,[]里面会替换为空了,我只能从现象里发现不一样的地方。具体 ...

会不会里面的值被吸掉了




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