The character class \w matches an alphanumeric character, so it matches a digit as well as a letter (or underscore). You need a character class which excludes digits. But \D includes anything not a digit, so it matches whitespace. A negated character class [^\d\s] will match a character that is neither a digit nor a space:
my @names = $text =~ /\b[^\d\s]*\d[^\d\s]*\b/g;
Or, more simply, specify the letters you want to match explicitly (note the /i modifier to make the regex case-insensitive):
my @names = $text =~ /\b[A-Z]*\d[A-Z]*\b/gi;
See the section “Character Classes and other Special Escapes” in perlre#Regular-Expressions.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: regex search for words with one digit
by Athanasius
in thread regex search for words with one digit
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |