正则表达式是一个ruby块参数和块内的所有实例

时间:2013-02-24 22:17:30

标签: ruby regex sublimetext2 textmate

我一直在尝试开发一个正则表达式来匹配一个块的参数,然后是该参数的所有实例。

使用此示例:

File.open(inFile).each do |line|
  line.chomp!
    if line.empty? then
      next
    elsif line =~ /^>/
      line.slice!(/>/)
      names.push(line)
    elsif line !~ /^>/
      seqs.push(line)
    end             
end 

我想匹配管道之间的单词line,然后匹配line的所有实例。

匹配参数很简单:

(?<=\|)(\w*?)(?=\|)

但我真的不确定如何将此匹配用作文档其余部分的模式。

欢迎任何关于如何进行的想法。

(编辑2:我现在不关心将正则表达式的范围限制在块中。我想匹配整个文档中的所有实例。请考虑重新检查这个更简单的问题。)

(编辑:我正在尝试将此正则表达式合并到textmate / sublime的tmLanguage文件中。这样,参数和所有实例都是相同的颜色。我相信有一种方法可以构建一个插件要做到这一点,但我还没有尝试过,除了看看sublime插件bracketHighlighter是如何工作的。)

2 个答案:

答案 0 :(得分:2)

不要那样做。认真。它不会可靠地运行,并且您将花费更多时间来校对和修复结果,而不是手动进行更改。

答案 1 :(得分:0)

如果查看Ruby语言包并查看已经分配了哪些名称匹配,您会发现第一部分已经完成:

name: variable.other.block.ruby
match: [_a-zA-Z][_a-zA-Z0-9]*

您可以使用该名称来引用阻止本地变量,可能是source.ruby.variable.other.block.ruby。我不确定你将如何引用多参数列表的不同匹配。

我将继续关注这个问题,因为你非常不清楚你是在试图解析语言本身,而不是文件中的输入。