1

使用正则表达式匹配 n 行后的文本。

在下面的示例中,我想确保请求正好在id 的第 3 行之后: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 为 100,任何人都可以帮助构建正则表达式吗?提前致谢。

4

2 回答 2

1

{100}量词表明前面的内容应该(\n[^\n]*)恰好出现100 次

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

演示

于 2014-07-14T06:31:43.150 回答
1

尝试:

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

设置不区分大小写并且点不匹配换行符

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

于 2014-07-14T06:40:35.150 回答