在n行之后准确匹配文本

时间:2014-07-14 06:25:38

标签: ruby regex rubular

使用正则表达式在n行之后恰好匹配文本。

在下面的示例中,我想确保 请求 正好位于 id:1

示例:

signal {
   id: 1
   files: 1.bin
   major: 338013710701
   request {
      reqId: 101
      files: 1.bin
      major: 35723057325
      status: Sent
   }
   response {
      resId: 201
      files: 1.bin
      major: 27151510570
      status: Accepted
   }
}

注意: n 的值会因输入而异(n的值可能高于100)。其中n是字符串出现之前的行数

我尝试使用正则表达式/signal\s*{\s*id:\s*1\n[^\n]*\n[^\n]*\s*request/m作为上面的例子,因为n的值n是最小的。

如果n为100,任何人都可以帮助构建正则表达式吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

{100}量词表示前面的(\n[^\n]*)应该正好发生100次

/signal\s{\s*id:\s*1(\n[^\n]*){100}request/m

请参阅demo

答案 1 :(得分:1)

尝试:

\bid: 1\b(?:.*\R){3}.*request

设置不区分大小写且dot与linebreak不匹配

在上面\ R是一个unicode linebreak。在早期版本的Ruby中不支持,如果这是一个问题,请替换类似\ n或类似适合您的环境的任何换行序列。