use strict;
my $str = ':-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :ã£)
:-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D
:-))
>:[ :-( :( :-c :c :-< :ã£C :< :-[ :[ :{
;(
:-|| :@ >:(
:\'-( :\'(
:\'-) :\')
D:< D: D8 D; D= DX v.v D-\':
>:O :-O :O :-o :o 8-0 O_O o-o O_o o_O o_o O-O
:* :^* ( \'}{\' )
;-) ;) *-) *) ;-] ;] ;D ;^) :-,
>:P :-P :P X-P x-p xp XP :-p :p
=p :-Þ :Þ :þ :-þ :-b :b d:
>:\\ >:/ :-/ :-. :/ :\\ =/ =\\ :L =L :S >.<
:| :-|
:$
:-X :X :-# :#
O:-) 0:-3 0:3 0:-) 0:) 0;^)
>:) >;) >:-)
}:-) }:) 3:-) 3:)
o/\\o ^5 >_>^ ^<_<
|;-) |-O
:-& :&
#-)
%-) %)
<:-|
ಠ_à²
\\o/
*\\0/*
(>_<)
~_~
-.-\'
(=_=)
';
my $regex = qr/(?!\d\d)(?![a-zA-Z]{2})(?:(?:>?[:;=%8BXx]['‘’]?[-o*,^ã£]?(?:(?P<mouth>[()|Il])(?P=mouth)*|[\/0\]o\\D\[PpSs<>{}CcOXx*3@ÞþbL&?$#]))|(?:[()\\{}\/<\[>\]DOo0|SsXxlI*@q][-o*,]?['‘’]?[:=8;%Xx]<?))|(?P<head>\()?(?:(?P<eye>[<>v*.^~=ಠ-])?[_.-](?P=eye)|[o0O][_.-][o0O]|>[_.-]?<)['‘’]?(?(head)\))|xD|XD|XP|xP|DX|<3|\^\^|\\o\/|o\/|\\o/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