use strict;
my $str = '2023-02-13T20:51:06.372+05:30 INFO 28357 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication using Java 17.0.2 with PID 28357 (/Users/snehangshub/Documents/Experiments/demo/build/classes/java/main started by snehangshub in /Users/snehangshub/Documents/Experiments/demo)
2023-02-13T20:51:06.373+05:30 INFO 28357 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: "default"
2023-02-13T20:51:06.715+05:30 INFO 28357 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-02-13T20:51:06.721+05:30 INFO 28357 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-02-13T20:51:06.721+05:30 INFO 28357 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.5]
2023-02-13T20:51:06.763+05:30 INFO 28357 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-02-13T20:51:06.764+05:30 INFO 28357 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 371 ms
2023-02-13T20:51:06.899+05:30 INFO 28357 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path \'\'
2023-02-13T20:51:06.903+05:30 INFO 28357 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 0.684 seconds (process running for 0.832)
2023-02-13T20:51:24.855+05:30 INFO 28357 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet \'dispatcherServlet\'
2023-02-13T20:51:24.855+05:30 INFO 28357 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet \'dispatcherServlet\'
2023-02-13T20:51:24.858+05:30 INFO 28357 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
2023-02-13T19:09:07.379Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path \'\'';
my $regex = qr/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}(?:Z|[+-]\d{2}:\d{2}))\s*(\w+)\s*(\d*)\s*---\s*\[\s*([a-zA-Z0-9\._-]+)?\]\s*([^\s]+)\s*:\s*([^\n]+)$/mp;
if ( $str =~ /$regex/g ) {
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