As for avoiding phone numbers, I can't really think of much that's better than the solutions you received recently. Here's my take for substitution:
c:\@Work\Perl\monks>perl -wMstrict -le
"use 5.010;
;;
my $s =
'Sent 1 12 to 1402, 222-2222, 1304, 555.555.5555 and 501, 666 666 6
+666 & 6789';
print qq{'$s'};
;;
my $sep = qr{ [-. ] }xms;
my $pn = qr{ \d{3} ($sep) (?: \d{3} \1)? \d{4} }xms;
my $an = qr{ \d{3,4} }xms;
;;
$s =~ s{ (?| $pn (*SKIP)(*F) | (?<! \d) ($an) (?! \d)) }
{<a $1><b>$1</b></a>}xmsg;
print qq{'$s'};
"
'Sent 1 12 to 1402, 222-2222, 1304, 555.555.5555 and 501, 666 666 6666
+ & 6789'
'Sent 1 12 to <a 1402><b>1402</b></a>, 222-2222, <a 1304><b>1304</b></
+a>, 555.555.5555 and <a 501><b>501</b></a>, 666 666 6666 & <a 6789><b
+>6789</b></a>'
Of course, this still uses regex features introduced with Perl version 5.10, and you still haven't said what version you have available, so a possible sticking point there...
Give a man a fish: <%-(-(-(-<
|