正面看后正则表达式明显最大长度

时间:2016-01-05 16:26:04

标签: java regex

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

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 ...”。

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

2 个答案:

答案 0 :(得分:1)

Java不支持lookbehind中的变长表达式。

您可以使用此正则表达式:

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

使用捕获的组#1

RegEx Demo

答案 1 :(得分:1)

只有在大小有限并且lookbehind中的子模式太复杂的情况下,Java才支持可变长度的lookbehind。

简而言之,你不能写:

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

但你可以写:

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

但有点像:

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

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