如何检测此线的存在?

这个问题与我刚才在这里提到的前一个问题有关,所以如果大部分语言看起来相似的话,请原谅我。

我有一个有多行的字符串。 我正在做的是检查每一行的具体特征,然后相应地对待它们。

  • 一个特征是如果该行以+或a开头。 这很好用。
  • 另一个特点是,如果它只包含一个\n ,并且Ilya帮我弄清楚如何检测这些线,这样做很好。
  • 我试图检测的最后一种字符串是那些与上​​述任何条件都不匹配的字符串,但是以一个以-+开头的行之后出现。

脱离上下文,这是我想要找到的有效字符串的示例: " end\n",

但是,这是一个在以+-开头的行之后的更完整的示例。

 "+ Reflection.add_reflection self, name, reflection\n", " end\n", " \n", "- habtm_reflection = ActiveRecord::Reflection::HasAndBelongsToManyReflection.new(name, scope, options, self)\n", 

在这个特定的例子中,我试图找出第二行。

这是一个实例,其中与纯字符串匹配参数匹配的字符串将被取消资格,因为它们来自以-或a +开头的字符串。

  " #\n", " # All of the association macros can be specialized through options. This makes cases\n", " # more complex than the simple and guessable ones possible.\n", "- module ClassMethods\n", 

我希望这很清楚。

编辑1

为了更清楚地说明我在寻找什么。 基本上我已经将字符串分成了一堆行,然后我在每一行迭代。

所以这就是我所做的:

        

所以我想要做的是修改上面的if语句集以适应这个最新的行检查,或者通过添加另一个elsif条件找到一些方法来检查它….虽然考虑到我需要知道发生了什么if没有修改这个if语句,我没有看到如何做到这一点。

 str = [ "+ Reflection ...\n", " end\n", " \n", "- habtm_reflection = ...\n"].join str[/(^[+-].*$)\n(?!\n)(^[^+-].*$)/, 2] #⇒ " end" 

正则表达式基本上查找以+ ot开头的行- (带(^[+-].*$) ),跳过\n然后将未启动的行与+-中的一行匹配( with (^[^+-].*$) 。)