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
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...