in reply to Regular Exp. in foreach loop Help!

I'm guessing that each set of numbers are accounts, as are the names. In other words, some accounts are concatenated with '-' (guess). You could use a scalar rather than an array to hold your data and split around [ -] (that's a space OR a hyphen). You might not have that option, so, with minimum alterations to your code:
use warnings; use strict; my @account = qw(34765-22333-333489-99867-22340-23456-3229 XLM8876 AMP +7765 WQP22349); my @chk_acc = map {split('-')} @account; foreach my $checked (@chk_acc) { # chomp(); if ($checked =~ /^(\w{3})(\d{4,7})/ig) { # it should print the accounts starting with letters here print "*$checked*<br>"; } else { # else the rest of the accounts not starting with any letters print"-$checked-<br>"; } }
Gives:-34765-<br>-22333-<br>-333489-<br>-99867-<br>-22340-<br>-23456-<br>-3229-<br>*XLM8876*<br>*AMP7765*<br>*WQP22349*<br>

Update: Your RE is more complex that it need be (unless you are not showing us the whole story):
if ($checked =~ /^\w{3}\d{4,7}/)
should be sufficient (\w includes upper and lowercase characters). However, what if there are more than 7 digits following? This RE would still match, did you mean /^\w{3}\d{4,7}$/?