From: Vincent Fourmond Date: 2007-01-10T23:47:32+09:00 Subject: Re: Is [:alnum:] equivalent to [A-Za-z0-9]? Jeff wrote: > Hi, > > I'm trying to creating a regex that will match a string that starts and > ends with an alphanumeric character, and has alphanumeric characters or > dashes in the middle. > > This regex gives the expected result: > irb(main):008:0> /^[:alnum:][A-Za-z0-9\-]*[A-Za-z0-9]$/ =~ "apple!" > => nil > irb(main):009:0> /^[:alnum:][A-Za-z0-9\-]*[A-Za-z0-9]$/ =~ "apple" > => 0 > > This regex works as expected on "apple!", but returns nil on "apple": > irb(main):010:0> /^[:alnum:][A-Za-z0-9\-]*[:alnum:]$/ =~ "apple!" > => nil > irb(main):011:0> /^[:alnum:][A-Za-z0-9\-]*[:alnum:]$/ =~ "apple" > => nil > > Can anyone explain this? Yes, that's a classical mistake: POSIX specifications of this kind must be included inside other []. Try rather /^[[:alnum:]][A-Za-z0-9\-]*[[:alnum:]]$/ The way you wrote it just meant ':' or 'a' or 'l' or... Vince -- Vincent Fourmond, PhD student http://vincent.fourmond.neuf.fr/