Re: Backreferences in case statements
- From: Robert Klemme <shortcutter@xxxxxxxxxxxxxx>
- Date: Sun, 04 May 2008 12:11:34 +0200
On 03.05.2008 18:00, loveajax@xxxxxxxxx wrote:
I am not sure if this is possible. I have a case statement which
checks for a regular expression. For example:
case text
when /(abc)(.)*/
when /(xyz)(.)*/
end
In the above snippet how can I use the instance variables pre_match
and post_match? I tried calling these methods without any qualifiers
but I got a NoMethodError. Where does Ruby store the MatchData if the
matching is done in a case statement?
$ irb
irb(main):001:0> /b/ =~ "abc"
=> 1
irb(main):002:0> $`
=> "a"
irb(main):003:0> $'
=> "c"
irb(main):004:0> $~
=> #<MatchData:0x7ff9eb54>
irb(main):005:0> $~.to_a
=> ["b"]
irb(main):006:0> $~.pre_match
=> "a"
irb(main):007:0> $~.post_match
=> "c"
irb(main):008:0>
But why do you have groups in your regular expressions if you are not interested in the content? Also "(.)*" seems a bit odd because it might not yield what you expect:
irb(main):008:0> /a(.)*/ =~ "abcdef"
=> 0
irb(main):009:0> $1
=> "f"
IMHO it is generally a bad idea to use grouping in the way you do it because it will capture a lot that you are not interested in. It seems you might rather want "(.*)".
Kind regards
robert
.
- Follow-Ups:
- Re: Backreferences in case statements
- From: loveajax
- Re: Backreferences in case statements
- References:
- Backreferences in case statements
- From: loveajax
- Backreferences in case statements
- Prev by Date: Re: Different Ways To Loop
- Next by Date: Re: Reverse Divisible Numbers (#161)
- Previous by thread: Re: Backreferences in case statements
- Next by thread: Re: Backreferences in case statements
- Index(es):
Relevant Pages
|