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?
On May 3, 2008, at 10:05 AM, loveajax@gmail.com wrote:
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?
--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama
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:
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
···
On 03.05.2008 18:00, loveajax@gmail.com 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?
In my guess /b/ =~ "abc" is what sets $~ variable. Since I am not
using that statement anywhere that variable is not set at all. Instead
I am doing the matching in a case statement. As a result I am not able
to do something like $~.pre_match. I am not fond of $1, $2, etc
variables. I feel comfortable using the instance variables pre_match
and post_match.
But you solved the first problem I was trying to solve I was using
(.)* instead of (.*) and I couldn't get what I wanted. (.*) is what I
needed. Thanks so much for that. Now I can use $1, $2 at least if not
pre_match and post_match.
-subbu
···
On May 4, 3:11 am, Robert Klemme <shortcut...@googlemail.com> wrote:
On 03.05.2008 18:00, lovea...@gmail.com 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?
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:
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 "(.*)".
I did use Regexp.last_match. But its a class method. I am interested
in using something like pre_match and post_match methods which are
instance variables. But looks like my code never created the instance
of MatchData.
Thanks
-subbu
···
On May 4, 5:40 am, Pit Capitain <pit.capit...@gmail.com> wrote:
2008/5/3 <lovea...@gmail.com>:
> Where does Ruby store the MatchData if the
> matching is done in a case statement?
Subbu, there's also Regexp.last_match. Sometimes this reads better
than those Perl-like variables.
Where does Ruby store the MatchData if the
matching is done in a case statement?
Matching doesn't change in or out of a case statement; it's still the
same thing.
Subbu, there's also Regexp.last_match. Sometimes this reads better
than those Perl-like variables.
Regards,
Pit
Hi Pitt,
I did use Regexp.last_match. But its a class method. I am interested
in using something like pre_match and post_match methods which are
instance variables. But looks like my code never created the instance
of MatchData.
Ruby keeps track of the last match operation performed, and that's
what you get in $~ (which is a MatchData object) and some of the
Regexp class methods.
David
···
On Sun, 4 May 2008, loveajax@gmail.com wrote:
On May 4, 5:40 am, Pit Capitain <pit.capit...@gmail.com> wrote:
2008/5/3 <lovea...@gmail.com>:
--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!
On May 4, 2008, at 8:25 AM, loveajax@gmail.com wrote:
On May 4, 5:40 am, Pit Capitain <pit.capit...@gmail.com> wrote:
2008/5/3 <lovea...@gmail.com>:
Where does Ruby store the MatchData if the
matching is done in a case statement?
Subbu, there's also Regexp.last_match. Sometimes this reads better
than those Perl-like variables.
Regards,
Pit
Hi Pitt,
I did use Regexp.last_match. But its a class method. I am interested
in using something like pre_match and post_match methods which are
instance variables. But looks like my code never created the instance
of MatchData.
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?
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:
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 "(.*)".
In my guess /b/ =~ "abc" is what sets $~ variable. Since I am not
using that statement anywhere that variable is not set at all.
That's complete nonsense. Did you try it out? I guess not. Come on, don't be so lazy.
Instead
I am doing the matching in a case statement. As a result I am not able
to do something like $~.pre_match. I am not fond of $1, $2, etc
variables. I feel comfortable using the instance variables pre_match
and post_match.
pre_match and post_match are not instance variables but methods of class MatchData.
But you solved the first problem I was trying to solve I was using
(.)* instead of (.*) and I couldn't get what I wanted. (.*) is what I
needed. Thanks so much for that. Now I can use $1, $2 at least if not
pre_match and post_match.
And $~ is actually a thread local global, so it holds the matchdata
produced by the last successful match on the current thread.
I'm pretty sure that Regexp.last_match is thread-safe as well.
···
On Sun, May 4, 2008 at 11:22 AM, David A. Black <dblack@rubypal.com> wrote:
> > 2008/5/3 <lovea...@gmail.com>:
> > > Where does Ruby store the MatchData if the
> > > matching is done in a case statement?
Matching doesn't change in or out of a case statement; it's still the
same thing.
Ruby keeps track of the last match operation performed, and that's
what you get in $~ (which is a MatchData object) and some of the
Regexp class methods.
On Sun, May 4, 2008 at 11:22 AM, David A. Black <dblack@rubypal.com> wrote:
2008/5/3 <lovea...@gmail.com>:
Where does Ruby store the MatchData if the
matching is done in a case statement?
Matching doesn't change in or out of a case statement; it's still the
same thing.
Ruby keeps track of the last match operation performed, and that's
what you get in $~ (which is a MatchData object) and some of the
Regexp class methods.
And $~ is actually a thread local global, so it holds the matchdata
produced by the last successful match on the current thread.
I'm pretty sure that Regexp.last_match is thread-safe as well.
I believe it just returns $~, so it should be identical in terms of
thread safety.
David
--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!