【问题标题】:Match text exactly after n lines在 n 行之后精确匹配文本
【发布时间】:2014-09-04 00:27:58
【问题描述】:

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

在下面的示例中,我想确保 request 正好在 id: 1 的第 3 行之后>

示例:

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,任何人都可以帮助构建正则表达式吗? 提前致谢。

【问题讨论】:

  • n 到底是什么意思?字段 reqID 后的数字?

标签: ruby regex rubular


【解决方案1】:

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

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

demo

【讨论】:

    【解决方案2】:

    试试:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      相关资源
      最近更新 更多