【问题标题】:Positive lookbehind regex obvious maximum length正则正则表达式明显的最大长度
【发布时间】:2016-01-05 16:26:03
【问题描述】:

所以我一直在尝试使用正则表达式来解析以下字符串:

INFO: Device 6: Time 20.11.2015 06:28:00 - [Script] FunFehlerButton: Execute [0031 text]    
and    
INFO: Device 0: Time 09.12.2015 03:51:44 - [Replication] FunFehlerButton: Execute    
and    
INFO: Device 6: Time 20.11.2015 06:28:00 - FunFehlerButton: Execute

我尝试使用的正则表达式是:

(?<=\\d{1,2}:\\d{2}:\\d{2} - ).*    

(?<=\\[\\w*\\]).*    

其中第一个运行正确,第二个运行异常。

我的目标是获取文本“FunFehlerButton: Execute ...”。

我希望有人能提示我正确的方向。

【问题讨论】:

标签: java regex


【解决方案1】:

Java 仅在大小有限且后向中的子模式不太复杂时才支持可变长度后向。

简而言之,你不能写:

(?<=\\[\\w*\\]).*

但你可以写:

(?<=\\[\\w{0,1000}\\]).*

不过是这样的:

(?<=\\[(?:\\w{0,2}){0,500}\\w?\\]).*

不起作用,因为最大长度不明显。

【讨论】:

    【解决方案2】:

    Java 不支持后向变长表达式。

    您可以改用这个正则表达式:

    String re = "(?:\\d{2}:\\d{2}:\\d{2} - (?:\\[[^\\]]*\\] )?)([\\w: -]+)";
    

    并使用捕获的组 #1

    RegEx Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多