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

时间:2017-08-08 14:14:58

标签: regex perl substring conditional

我需要提取子字符串,因为存在另一个子字符串。在下面的示例中,单词ERROR:继续值12345678.我需要值12345678.在第二个示例中,ERROR:不存在。因此我不需要任何结果。这是我得到的:

ERROR:.*(\d)
  

20170808错误:TXN 12345678达到了请求限制。

     

20170808警告:TXN 22345678待定到期。

如果您是正则表达式大师,那么您就知道上面的匹配

  

错误:TXN 12345678

并且该组仅为数字8.我需要整数。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用

ERROR:.*?(\d+)

请参阅regex demo。在这里,.*?将尽可能少地匹配除换行符之外的任何0 +字符(因为*?是一个惰性量词)并且(\d+)将捕获到组1中的一个或多个数字

或者

ERROR:.*\D(\d+)

another demo。在这里,.*\D将匹配除了换行符之外的任何0+字符作为很多(因为*是一个贪婪的量词),直到并包括最后一个非数字字符(包含\D)然后(\d+)将在第1组中捕获一个或多个数字。

选择最适合您的场景的模式(如果数字是ERROR:之后的第一组数字,则第一个是最佳的;当数字组是一行中的最后一个数字时,第二个最好。