-1

我正在构建一个 Ruby 脚本,它读取 ruby​​ 源文件以查找对函数的调用_()并获取传递给它的参数的字符串,它可以是多行字符串,单引号或双引号,例如:

  1. 抓住:hello world

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

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

    _("hello \"world\"")
    
  4. 抓住:hello 'world'

    _('hello \'world\'')
    

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

4

2 回答 2

2

尝试使用正则表达式分析源代码通常会导致复杂且脆弱的代码在所有情况下都不起作用。您需要考虑单引号和双引号,此处为文档,括号内的引号等。

您可能需要做的是获得一个 ruby​​ 词法分析器。其中有几种,有些是用 ruby​​ 编写的,有些是用 antlr 编写的,甚至可能还有一个是用 lex 编写的。词法分析器会将源解析为标记,然后您扫描标记列表以找到您想要的部分。

通过查看 ruby​​ 解释器或开源编辑器中的语法着色代码,您可能会得到一些关于如何做到这一点的想法。

另一种方法是编写一个正则表达式来定位有趣的标记、单引号、双引号、_、(、) 和换行符。然后编写一个有限状态机来扫描这个列表以寻找感兴趣的短语。我已经成功地使用了这种技术来操作 SQL。

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

于 2013-05-04T23:44:22.113 回答
0

我会使用它而不是正则表达式:

def _(str)
  str
end

还是我错过了什么?

于 2013-05-04T21:10:57.863 回答