所以我一直在尝试使用正则表达式来解析以下字符串:
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 ...”。
我希望有人能向我提示正确的方向。
答案 0 :(得分:1)
Java不支持lookbehind中的变长表达式。
您可以使用此正则表达式:
String re = "(?:\\d{2}:\\d{2}:\\d{2} - (?:\\[[^\\]]*\\] )?)([\\w: -]+)";
使用捕获的组#1
答案 1 :(得分:1)
只有在大小有限并且lookbehind中的子模式太复杂的情况下,Java才支持可变长度的lookbehind。
简而言之,你不能写:
(?<=\\[\\w*\\]).*
但你可以写:
(?<=\\[\\w{0,1000}\\]).*
但有点像:
(?<=\\[(?:\\w{0,2}){0,500}\\w?\\]).*
不起作用,因为最大长度不明显。