在最后一次出现keyword1之后但仍在关键字2之前查找数字

时间:2017-09-06 08:25:18

标签: regex

对以下多行文字进行成像:

foo1
  some text
foo12
  some text
  bar
  some text
foo123
  some text

我想知道哪些 foo 属于 bar 。换句话说,我需要在最后一个 foo 之后立即匹配数字,后面还有 bar

在上面的示例中,最后一个 foo 符合条件 foo12 ,所以我想匹配 12

我几乎没有关于正则表达式的线索,到目前为止,我得到了类似的结果:

(?s)(?<=foo)\d*(?=.*bar)

你可以在这里查看:

https://regex101.com/r/FiwO14/1

匹配前两个 foo foo1 foo12 )之后的数字,但我只需要第二个。< / p>

1 个答案:

答案 0 :(得分:2)

您需要在前瞻中使用(?:(?!foo).)*? tempered greedy token

(?s)(?<=foo)\d*(?=(?:(?!foo).)*?bar)
                  ^^^^^^^^^^^^^^

请参阅regex demo

(?:(?!foo).)*?模式匹配任何char(.),0次或更多次但尽可能少(*?),这不是{{1}的起始字符}序列。

如果 foo始终位于一行的开头,您也可以按如下方式编写

foo

请参阅another regex demo(注意此处没有(?<=foo)\d*(?=.*(?:\R(?!foo\d).*)*bar) DOTALL修饰符,此处不需要)。 (?s)匹配:

  • .*(?:\R(?!foo\d).*)* - 其余部分
  • .* - 零个或多个连续序列:
    • (?:\R(?!foo\d).*)* - 任何没有跟\R(?!foo\d)和任何数字
    • 的换行符序列\R
    • foo - 其余部分。