Monday, January 28, 2019

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



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?



Answer



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$)

No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...