赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
p 是一个字符串对象的引用,通过调用它的 gsub! 方法可以对其做批量的字符串替换,而具体的替换规则由 gsub! 的第一个参数决定,也就是这句脚本中两个斜杠 “/” 之间的内容。这个参数是一个正则表达式,用来匹配符合表达式的字符串,一旦匹配,那么就把匹配的字符串替换为 gsub! 方法的块(块即是由左大括号开始、右大括号结束的整个部分)的返回值,在这里就是 "\001[#{$1}]" 这个字符串~
回过头再来看看正则表达式的具体内容:
\\[Cc]\[([0-9]+)\]
这个正则表达式匹配的是:
一个反斜杠“\”(\\ 表示匹配反斜杠本身),紧跟着大写或小写的 C([Cc] 部分),紧跟着一个左中括号“[”(\[ 部分),紧跟着 n 个 0 至 9 的数字([0-9]+ 部分,+ 表示前面的部分出现一次或多次都匹配),紧跟着一个右中括号“]”
一旦匹配上面条件的字符串都将被替换,比如:
\c[0]
\C[3]
\C[9]
\c[7]
最后再回到刚才提到的替换字符串 "\001[#{$1}]",\001 是一个记号,在内存中是 ASCII 码的 1 ,这表示接下来的文字要替换颜色,至于具体是什么颜色取决于 #{$1} 中的这个 $1。#{...} 这是一个内嵌表达式,作用是把大括号包围的表达式解析并返回其值,嵌入到字符串中。$1 是一个全局变量,当匹配正则表达式成功后,正则表达式的括号中匹配成功的具体内容就会被保存到 $1 中,如果有多个括号的话,就根据先后顺序依次保存到 $2、$3,等等等等
回顾一下刚才举出的那四个成功匹配的例子:
\c[0]
\C[3]
\C[9]
\c[7]
这些例子的 $1 依次是:0、3、9、7,所以会被依次替换为:
\001[0]
\001[3]
\001[9]
\001[7] |
|