-4

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

使用这个例子:

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:我现在不关心将正则表达式的范围限制在块中。我想匹配整个文档中的所有实例。请考虑重新检查这个更简单的问题。)

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

4

2 回答 2

2

不要那样做。严重地。它不会可靠地工作,与手动进行更改相比,您将花费更多时间校对和修复结果。

于 2013-02-24T22:26:25.537 回答
0

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

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

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

我将继续对这个问题投反对票,因为非常不清楚您是在尝试解析语言本身,而不是来自文件的输入。

于 2013-02-25T08:35:07.403 回答