use strict;
my $str = 'Visit https://example.com for more information.
Check out https://github.com/user/repo, it\'s really good.
The API endpoint is https://api.service.com/v1/data; use it carefully.
Go to https://example.com: it has everything you need.
See https://docs.example.com? It explains the process.
Try https://example.com! It\'s amazing.
The site (https://example.com) is down for maintenance.
Links like https://example.com are common in emails.
Visit https://example.com/path/file.pdf and download it.
The URL https://example.com/api?key=123 returns JSON data.
Check https://example.com, https://test.org, and https://demo.net.
Go to https://example.com... wait, that\'s the wrong link.
The website https://example.com-- actually, never mind.
Visit https://example.com/path?q=value&r=2 for the search results.
See https://example.com/file.html, then click the button.
The documentation at https://docs.example.com; section 4.2 explains it.
Try https://example.com:8080/api/v1/users for user data.
Links: https://example.com, https://test.org; both are useful.
Go to https://example.com/path/to/resource, download the file.
The URL https://example.com/path#section contains the answer.
Visit https://example.com/very/long/path/here for details.
Check https://sub.domain.example.com for subdomain content.
The site https://example.com/path.with.dots has interesting content.
Go to https://example.com/path-with-dashes?, it\'s well organized.
See https://example.com/path_with_underscores for more info.
The endpoint https://api.example.com/v2/data?format=json returns data.
Visit https://example.com/file.tar.gz to download the archive.
Check https://example.com/path?param=value.with.dots for configuration.
The URL https://192.168.1.1:8080 is for local testing.
Go to https://example.com/path/ (note the trailing slash).';
my $regex = qr`(https?://[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}[-a-zA-Z0-9()@:%_+.~#?&/=]*/?([-a-zA-Z0-9()@%_+~#?&/=]|\b))`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