正则表达式匹配多行单引号或双引号字符串

时间:2013-05-04 14:53:14

标签: ruby regex

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

  1. 抓取:hello world

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

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

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

    _('hello \'world\'')
    
  5. 所以我需要一个正则表达式来匹配并获取字符串参数。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

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

你可能需要做的是获得红宝石词法分析器。其中有几个,一些用ruby编写,一些用antlr编写,甚至可能用lex编写。词法分析器会将源解析为令牌,然后扫描令牌列表以找到所需的部分。

您可以通过查看ruby解释器或开源编辑器中的语法着色代码来获得有关如何执行此操作的一些想法。

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

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

答案 1 :(得分:0)

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

def _(str)
  str
end

或者我错过了什么?