Section 3.12. Using Embedded Subexpressions


3.11. Using Embedded Options

The common way to specify options for a regex is to use a trailing option (such as i or m). But what if we want an option to apply only to part of a regular expression?

We can turn options on and off with a special notation. Within parentheses, a question mark followed by one or more options "turns on" those options for the remainder of the regular expression. A minus sign preceding one or more options "turns off" those options:

/abc(?i)def/         # Will match abcdef, abcDEF, abcDef, ...                      #   but not ABCdef /ab(?i)cd(?-i)ef/    # Will match abcdef, abCDef, abcDef, ...                      #   but not ABcdef or abcdEF /(?imx).*/           # Same as /.*/imx /abc(?i-m).*/m       # For last part of regex, turn on case                      #   sensitivity, turn off multiline


If we want, we can use a colon followed by a subexpression, and those options specified will be in effect only for that subexpression:

/ab(?i:cd)ef/        # Same as /ab(?i)cd(?-i)ef/


For technical reasons, it is not possible to treat the o option this way. The x option can be treated this way, but I don't know why anyone ever would.




The Ruby Way(c) Solutions and Techniques in Ruby Programming
The Ruby Way, Second Edition: Solutions and Techniques in Ruby Programming (2nd Edition)
ISBN: 0672328844
EAN: 2147483647
Year: 2004
Pages: 269
Authors: Hal Fulton

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net