use strict;
my $str = '"Thrift:457] 2013-08-22 13:54:18,569 FailureDetector.java (line 150) unknown endpoint /17.164.241.92"
"Thrift:416] 2013-08-22 13:58:52,689 FailureDetector.java (line 150) unknown endpoint /17.164.241.92"
"Thrift:363] 2013-08-22 13:54:36,489 FailureDetector.java (line 150) unknown endpoint /17.164.241.92"
"Thrift:13] 2013-08-22 13:55:40,263 FailureDetector.java (line 150) unknown endpoint /17.164.241.92"
"OptionalTasks:1] 2013-08-22 13:54:23,932 AbstractCassandraDaemon.java (line 132) Exception in thread Thread[OptionalTasks:1,5,main]"
"MutationStage:87] 2013-08-22 13:59:40,582 AbstractCassandraDaemon.java (line 132) Exception in thread Thread[MutationStage:87,5,main]"
"MutationStage:71] 2013-08-22 13:24:28,812 AbstractCassandraDaemon.java (line 132) Exception in thread Thread[MutationStage:71,5,main]"
"MutationStage:6] 2013-08-22 13:21:59,901 AbstractCassandraDaemon.java (line 132) Exception in thread Thread[MutationStage:6,5,main]"
"MutationStage:43] 2013-08-22 13:24:25,239 AbstractCassandraDaemon.java (line 132) Exception in thread Thread[MutationStage:43,5,main]"
"MutationStage:36] 2013-08-22 13:33:39,235 AbstractCassandraDaemon.java (line 132) Exception in thread Thread[MutationStage:36,5,main]"
';
my $regex = qr/ ^ERROR\s\[(?<title>\w+:\d+.*)?/p;
if ( $str =~ /$regex/ ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html