Regex 正则表达式(PCRE):匹配包含特定字符串的行之后的行中的所有数字

Regex 正则表达式(PCRE):匹配包含特定字符串的行之后的行中的所有数字,regex,pcre,Regex,Pcre,使用PCRE,我只想捕获某个字符串出现的行之后的行中的所有数字。假设字符串是“STRING99”。例如: 汽车房45b 22只狗1只猫 女6男 在这种情况下,期望的结果是: 221 但是,正如前一段时间所问的类似问题一样,当时我们试图在字符串出现的同一行()中捕获数字。虽然问题是相似的,但我不认为答案是相似的,如果有答案的话。在这种情况下,使用换行锚点的方法不起作用 我正在寻找一个没有任何其他编程代码的正则表达式。使用两个连续的正则表达式操作很容易完成,但这不是我想要的。也许您可以尝试: (?:

使用PCRE,我只想捕获某个字符串出现的行之后的行中的所有数字。假设字符串是“STRING99”。例如:

汽车房45b
22只狗1只猫
女6男

在这种情况下,期望的结果是:

221

但是,正如前一段时间所问的类似问题一样,当时我们试图在字符串出现的同一行()中捕获数字。虽然问题是相似的,但我不认为答案是相似的,如果有答案的话。在这种情况下,使用换行锚点的方法不起作用

我正在寻找一个没有任何其他编程代码的正则表达式。使用两个连续的正则表达式操作很容易完成,但这不是我想要的。

也许您可以尝试:

(?:\bstring99\b.*?\n|\G(?!^))[^\d\n]*\K\d
在线查看

  • (?:
    -打开非捕获组:
    • \bstring99\b
      -字面上匹配单词边界之间的“string99”
    • *?\n
      -延迟匹配到(包括)最近的换行符
    • |
      -或:
    • \G(?!^)
      -在上一个匹配的结尾处断言位置,但使用负前瞻防止它成为第一个匹配的字符串的开头
    • -关闭非捕获组
  • [^\d\n]*
    -匹配0+非数字/换行符
  • \K
    -重置报告匹配的起点
  • \d
    -匹配一个数字
    • 也许你可以试试:

      (?:\bstring99\b.*?\n|\G(?!^))[^\d\n]*\K\d
      
      在线查看

      • (?:
        -打开非捕获组:
        • \bstring99\b
          -字面上匹配单词边界之间的“string99”
        • *?\n
          -延迟匹配到(包括)最近的换行符
        • |
          -或:
        • \G(?!^)
          -在上一个匹配的结尾处断言位置,但使用负前瞻防止它成为第一个匹配的字符串的开头
        • -关闭非捕获组
      • [^\d\n]*
        -匹配0+非数字/换行符
      • \K
        -重置报告匹配的起点
      • \d
        -匹配一个数字

      您还可以使用贪婪的
      *
      匹配行的其余部分,并在结尾处匹配1+位:-)+1您还可以使用贪婪的
      *
      匹配行的其余部分,并在结尾处匹配1+位:-)+1