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

Project1

 找回密码
 注册会员
搜索
查看: 2059|回复: 2

[讨论] 正则表达式替换问题

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
9467
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

发表于 2016-1-20 01:04:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2016-1-20 01:05 编辑

出于写对话框脚本的需要,现在遇到了一个正则表达式的替换问题。

现在需要利用正则表达式对一串字符串中的某些内容进行替换,就类似于宏展开那样。
例如,我想用'\red{文字}'来表示'\c[2]文字\c[0]',这样,在对话框中就可以方便做出临时更改文字颜色的效果,而且会少输入一些控制码。
如果是一个这样的还好说,直接利用
RUBY 代码复制
  1. text.gsub!(/\\red\{(.*?)\}/) { "\\c[2]#{$1}\\c[0]" }

即可。
现在我有一堆这样的正则表达式命令,每个正则表达式内的群组化情况不相同。这些正则表达式和它们所对应的替换字符串以hash的形式储存。如果提前定义
RUBY 代码复制
  1. GS = {
  2.   /\\red\{(.*?)\}/ => "\\c[2]#{$1}\\c[0]",
  3.   /\\col\[(\d+)\]\{(.*?)\}/ => "\\c[#{$1}]#{$2}\\c[0]"
  4. }

会有问题,因为构造Hash表GS的时候,$1和$2的值为nil,所以Hash表里的内容不是我想要的。

请问如何写GS的构造(或者是更改下面代码细节上的书写方式),使得下面代码能得到预期的效果?
RUBY 代码复制
  1. GS.each_pair do |regex, str|
  2.   text.gsub!(regex) { str }
  3. end

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2207
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

发表于 2016-1-20 08:00:39 | 显示全部楼层
本帖最后由 taroxd 于 2016-1-20 08:05 编辑

这里完全没有看出来使用 block 的必要呢……

RUBY 代码复制
  1. GS = {
  2.   /\\red\{(.*?)\}/ => '\\c[2]\\1\\c[0]',
  3.   /\\col\[(\d+)\]\{(.*?)\}/ => '\\c[\\1]\\2\\c[0]'
  4. }
  5.  
  6. text = '\\red{VIPArcher}'
  7.  
  8. GS.each_pair do |regex, str|
  9.   text.gsub!(regex, str)
  10. end
  11.  
  12. text # => '\\c[2]VIPArcher\\c[0]'


另外,你这样写一个哈希表并没有比下面这些代码少打多少字。所以你完全可以直接一行一行写嘛。

RUBY 代码复制
  1. text.gsub!(/xxx/, xxx)
  2. text.gsub!(/yyy/, yyy)

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 认可答案,另外你可以分类这里的帖子吧.

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9467
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

 楼主| 发表于 2016-1-20 08:56:07 | 显示全部楼层
taroxd 发表于 2016-1-20 08:00
这里完全没有看出来使用 block 的必要呢……

GS = {


原来后项引用可以用在这里,当初学的时候还真不知道有这个功能。

另外,这个Hash是在设置区域上,不是给我自己用。因为这个设定部分和真正调用部分相隔比较远,所以让使用者直接写的话会比较麻烦,还得来回找。(不过这个功能是给懂正则表达式的人用的,既然懂正则表达式那么直接写也没什么困难)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 12:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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