It would be nice if the regular expression could be made less specific, but some features of your data format make that tricky (e.g. the fact that the value following "=>" can be a zero-length string).
However, I think it's pretty much guaranteed that there will be whitespace between the key/value pairs. Yet, you use /
\s*/. Also,
nowhere do I see specified that there even may be whitespace around the "
=>" — you just made that up. As this file looks to be computer generated, I sincerely doubt that this will ever be the case. Finally: the only place do I see whitespace
inside a column value, is in the final column of the line: the timestamp.
In short: I think this regex will do:
/^Collection=>(\S*) \s+
ImageCount=>(\S*) \s+
Status=>(\S*) \s+
Missing=>(\S*) \s+
Modified=>(.*\S) /x
And if you do this:
my %r =
/^ (Collection)=>(\S*) \s+
(ImageCount)=>(\S*) \s+
(Status)=>(\S*) \s+
(Missing)=>(\S*) \s+
(Modified)=>(.*\S)
/x;
you even get a nice hash record out of it, even though it is restricted to one match per line (otherwise, when using
/g you'd get list context, with a different behavior as a result.