The only thing that it different in the 2 regexps is the placement of
the space in the square brackets, yet the first regexp is invalid and
the 2nd valid.
On Thu, 7 Dec 2006 07:38:10 +0900, Daniel F. [email protected] wrote:
the 2nd valid.
Why is this?
When an unescaped - appears in any position but the first or final one
inside brackets, it is interpreted as a range separator rather than a
literal ‘-’. Apparently '+- ’ isn’t a valid range.
It’s the placement of the - that makes a difference. In a character
class, - between two characters denotes a range. So the first
character class includes a range, from + to , which is invalid
because + comes after space in the relevant character encoding.
If you want a literal hyphen in a character class, it’s safest to make
it the last character.
The hyphen in the middle expression is ambiguous, because it could
either be a range or a literal.
One way is to rearrange the order so that it comes first:
/([0-9])([^-+ ]+)(.)/
I’m pretty sure the dash needs to be escaped in regular expressions.
The second one works since it is the last character in the character
class, and hence isn’t defining a range.
/([0-9])([^+- ]+)(.)/ should work - note the escaped dash.
I’m pretty sure the dash needs to be escaped in regular expressions.
The second one works since it is the last character in the character
class, and hence isn’t defining a range.
/([0-9])([^+- ]+)(.)/ should work - note the escaped dash.
I’m pretty sure the dash needs to be escaped in regular expressions.
The second one works since it is the last character in the character
class, and hence isn’t defining a range.
/([0-9])([^+- ]+)(.)/ should work - note the escaped dash.
Rubbish. In character ranges, \ is not special.
It most certainly is special:
irb(main):014:0> /[a+- ]/=~“.\”
=> nil