I have files file1, file2 contains contents such:
[2017-02-01 10:00:00 start running [error:yes] [doing:no] [finish:] [remind:] [alarmno:123456789] [logno:12345678
You may use
^\[?(\d[\d-]+).*?\[alarmno:(\w*)].*?\[logno:(\w*)].*?\[type:\w*:([^\]]*)]
See the regex demo
Details:
^
- start of string\[?
- an optional [
(\d[\d-]+)
- Group 1: a digits and 1 or more digits or -
s.*?
- any 0+ chars other than line break chars as few as possible\[alarmno:
- a [alarmno:
substring(\w*)
- Group 2: 0+ word chars]
- a literal ]
.*?
- any 0+ chars other than line break chars as few as possible\[logno:
- a literal [logno:
substring(\w*)
- Group 3: 0+ word chars]
- a ]
.*?
- any 0+ chars other than line break chars as few as possible \[type:
- a [type:
substring\w*
- 0+ word chars:
- a colon([^\]]*)
- Group 4: 0+ chars other than ]
]
- a ]
Java demo:
String s = "[2017-08-17 08:00:00 Comming in [Contact:NO] [REF:] [REF2:] [REF3:] [Name:+AA] [Fam:aa] [TEMP:-2:0:-2:0:-2] [Resident:9:free] [end:0:]";
Pattern pat = Pattern.compile("^\\[*(\\d[\\d: -]+\\d).*?\\[Name:([^]]*)].*?\\[Fam:(\\w*)].*?\\[Resident:\\w*:([^]]*)]");
Matcher matcher = pat.matcher(s);
if (matcher.find()){
System.out.println("Date: " + matcher.group(1));
System.out.println("Name: " + matcher.group(2));
System.out.println("Fam: " + matcher.group(3));
System.out.println("Resident: " + matcher.group(4));
}
Output:
Date: 2017-08-17 08:00:00
Name: +AA
Fam: aa
Resident: free