What is '?-mix' in a Ruby Regular Expression

regex, ruby

Solution

`mix` is not the English word mix, it's options of `Regexp`.

See `Regexp#to_s`:

Returns a string containing the regular expression and its options (using the (`?opts:source`) notation.

In your example, `m` is for multiline mode, `i` is for case insensitive, and `x` is for extended mode. Options before the dash are on, those after are off (default). The question's example, `?-mix`, has all options off.

You can turn them on like:

puts /^a$/mix
# =>(?mix:^a$)

Problem

Just trying to debug a regular expression in ruby. When I print the contents of a regular expression, it shows `?-mix` at the beginning of the regular expression even though those characters were not part of the expression. Please see the following IRB output to see this illustrated ``` irb(main):028:0* EXPR = /^a$/ => /^a$/ irb(main):029:0> EXPR => /^a$/ irb(main):030:0> puts EXPR (?-mix:^a$) => nil ``` As you can see, when you use `puts` to print out the contents of a regular expression, there is `?-mix` at the beginning. Should I be concerned by this? Where is it coming from?

Original source