use strict;
my $str = '#@luckydonald/bonbot
#@luckydonald.bonbot
#@luckydonald bonbot
#luckydonald/bonbot
#luckydonald bonbot
#luckydonald.bonbot
#luckydonald/.home
#luckydonald..home
#luckydonald .home
#/bonbot
#bonbot
#.bonbot
#bonbot
## Not allowed: ##
@luckydonald .home
luckydonald/home
##lol/bar
#@lilz
#@lol@huu
#lol wut lol
#-invalid/ho
#@-invalid/yo
#lolol-/möp
#möü/sdds';
my $regex = qr/^\#\s* # must start with "#" to indicate beeing a repo.
(?:@?@?(?!-)(?P<user>(?:[a-zA-Z0-9]|-(?!-))+[a-zA-Z0-9])(?![^\x00-\x7F]))? # Username part
(?:(?<=\#)|[/\s\.](?<!\v))(?P<repo>[a-zA-Z0-9_.-]+)$/mixp;
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