use strict;
my $str = ':( Hello!
Howdy :)!
Are you there :P?
I\'m fine :)
:p
:O
:3
:|
:/
:\\
:$
:*
:@
:(
:-(
:-)
:-P
:-p
:-O
:-3
:-|
:-/
:-\\
:-$
:-*
:-@
:^(
:^)
:^P
:^p
:^O
:^3
:^|
:^/
:^\\
:^$
:^*
:^@
):
(:
$:
*:
)-:
(-:
$-:
*-:
)^:
(^:
$^:
*^:
<3
</3
<\\3
:‑)
:)
: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‑\':
:\'-D
>:O
:‑O
:O
:‑o
:o
8‑0
O_O
o‑o
O_o
o_O
o_o
owo
Owo
OwO
ouo
OuO
O-O
:*
:^*
;‑)
;)
;‑]
;]
;D
;^)
>:P
:‑P
:P
X‑P
x‑p
xp
XP
:‑p
:p
=p
:‑Þ
:Þ
:þ
:‑þ
:‑b
:b
d:
>:\\
>:/
:‑/
:‑.
:/
:\\
:L
=/
=\\
:L
=L
:S
>.<
>/<
>//<
>///<
:|
:‑|
:$
:‑X
:X
:‑#
:#
O:‑)
0:‑3
0:3
0:‑)
0:)
0;^)
>:)
>;)
>:‑)
}:‑)
}:)
3:‑)
3:)
>_>
^ ^
^_^
^_<
>_^
<_<
|;-)
|-O
:-J
:-&
:&
#-)
#)
%-)
%)
:|
:o|
:-|
ಠ_ಠ
:-\\
*<|:-)
<3 </3
ˊ_>ˋ
';
my $regex = qr/((D|O|0|3|\}|>|\*\<\||\|)?(%|#|\||x|X|B|8|:|;|\=)('|")?(\^|c|-|‑|o|っ)?(D|\)|\(|c|<|\[|\]|C|{|}|\||\&|>|\||3|Þ|þ|b|p|P|o|O|J|L|S|s|X|\\|\.|/|\$|\*|#|@))/p;
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