2013-05-04 145 views
-1

我建立一个Ruby脚本读取红宝石源文件中查找调用函数_()和掠传递给它的参数,它可以是一个多行字符串的字符串,单或双引号括起来,例如:正则表达式匹配多单或双引号中的字符串

  1. 抓斗:hello world

    _('hello'+ 
    ' world') 
    
  2. 抓斗:hello \nworld

    _("hello \ 
    world") 
    
  3. 抓斗:hello "world"

    _("hello \"world\"") 
    
  4. 抓斗:

    _('hello \'world\'') 
    

所以我需要一个正则表达式匹配和抢字符串参数。我怎样才能做到这一点?

+2

抱歉编辑。您的原稿足够好,但有人建议对您的帖子进行编辑,这种编辑会在没有警告的情况下合并。 – nhahtdh 2013-05-04 15:00:47

+1

你能更精确吗?例如,你不应该匹配什么? – mdesantis 2013-05-04 15:29:41

+0

这看起来更像是一个为eval而不是正则表达式的工作。我的意思是,例如,如果一个变量传递给'_()'?正则表达式当然不能处理。 – azgult 2013-05-04 15:39:11

回答

2

试图分析源代码的正则表达式通常会导致复杂脆弱的代码并不适用于所有情况。您将需要考虑括号内封闭的单引号和双引号,这里的文档,报价等

什么,你可能需要做的就是红宝石词法分析器。其中有一些是用ruby编写的,有些用antlr编写的,甚至可能用lex编写。词法分析器将源代码解析为令牌,然后扫描令牌列表以找到想要的片段。

你可能会得到有关如何通过看Ruby解释器或在一个开源编辑器中的语法着色代码做一些这方面的想法。

另一种方式做,这是写的是位于有趣的令牌,烧毛报价,双引号,_,(,),和换行正则表达式。然后写一个有限状态机扫描这个列表寻找感兴趣的短语。我已经成功地使用这种技术来操纵SQL。

你没有告诉我们什么是实际需求。可能有另一种解决方案不需要这些。

0

我会用它来代替一个正则表达式:

def _(str) 
    str 
end 

还是我失去了一些东西?

+0

嗡嗡声,我需要从源代码中提取调用,并且评估所有源代码是不可能的。 – brauliobo 2013-05-04 23:21:13

相关问题