Perl Regex 提取子字符串,因为存在其他子字符串

Perl Regex extract substring because other substring exists

我需要提取一个子字符串,因为存在另一个子字符串。在以下示例中,单词 ERROR: 产生值 12345678。我需要值 12345678。在第二个示例中,ERROR: 不存在。因此我不需要结果。据我所知:

ERROR:.*(\d)

20170808 ERROR: TXN 12345678 Request limit reached.

20170808 WARN: TXN 22345678 Pending expire.

如果您是正则表达式专家,那么您就知道上述匹配项

ERROR: TXN 12345678

组只有数字8。我需要整数。谢谢你的帮助。

您可以使用

ERROR:.*?(\d+)

regex demo。在这里,.*? 将匹配除换行符以外的任何 0+ 个字符(因为 *? 是惰性量词)并且 (\d+) 将捕获到第 1 组一个或多个数字.

或者,或者,

ERROR:.*\D(\d+)

参见 another demo。在这里,.*\D 将尽可能匹配 many(因为 * 是一个贪婪的量词),直到并包括最后一个非数字字符(\D)然后 (\d+) 将捕获到第 1 组一个或多个数字。

选择最适合您的情况的模式(如果数字是 ERROR: 之后的第一组数字,则第一个是最好的,当该组数字是一行中的最后一个数字时,第二个是最好的).