[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Regexp Capture Access

Oliver Saunders

4/2/2008 1:20:00 PM

Given that:

%r{(\w,)+}.match('a,b,c')[0] #=> "a,b,"

and

%r{(\w,)+}.match('a,b,c')[1] #=> "b,"

How do I access the capture that contains "a,"?
--
Posted via http://www.ruby-....

7 Answers

WujcioL

4/2/2008 2:05:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

Try:

%r{(\w,)+}.match('a,b,c').to_s[0..1] #=> "a,"

2008/4/2, Oliver Saunders <oliver.saunders@gmail.com>:
>
> Given that:
>
> %r{(\w,)+}.match('a,b,c')[0] #=> "a,b,"
>
> and
>
> %r{(\w,)+}.match('a,b,c')[1] #=> "b,"
>
> How do I access the capture that contains "a,"?
>
> --
> Posted via http://www.ruby-....
>
>


--
My own blog (in polish) :
wujciol.yoyo.pl

Robert Dober

4/2/2008 2:28:00 PM

0

On Wed, Apr 2, 2008 at 3:20 PM, Oliver Saunders
<oliver.saunders@gmail.com> wrote:
> Given that:
>
> %r{(\w,)+}.match('a,b,c')[0] #=> "a,b,"
>
> and
>
> %r{(\w,)+}.match('a,b,c')[1] #=> "b,"
>
> How do I access the capture that contains "a,"?
> --
> Posted via http://www.ruby-....
>
>
Use scan

"a,b,c".scan(/\w+,/) --> ['a,', 'b,']
and in order to have the whole match you have to join the result of scan again.

HTH
Robert

--
http://ruby-smalltalk.blo...

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

mt

4/2/2008 2:31:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

The reason why it's acting like this is because Regexes try to find the
largest possible match from your expression. Hence, your expression

%r{(\w,)+}.match('a,b,c')[0]

will return the first match (and largest) "a,b,"


Im sure you're asking this for a bigger reason, so you have to refine your
regular expression for that specific purpose. if you just want to split
based on a "," then simply do 'a,b,c'.split(',') which returns an array
["a", "b", "c"]

If any other, please post the actual problem.

HTH
Mutahhir.


On Wed, Apr 2, 2008 at 10:04 PM, Mateusz Tybura <wujciol@gmail.com> wrote:

> Try:
>
> %r{(\w,)+}.match('a,b,c').to_s[0..1] #=> "a,"
>
> 2008/4/2, Oliver Saunders <oliver.saunders@gmail.com>:
> >
> > Given that:
> >
> > %r{(\w,)+}.match('a,b,c')[0] #=> "a,b,"
> >
> > and
> >
> > %r{(\w,)+}.match('a,b,c')[1] #=> "b,"
> >
> > How do I access the capture that contains "a,"?
> >
> > --
> > Posted via http://www.ruby-....
> >
> >
>
>
> --
> My own blog (in polish) :
> wujciol.yoyo.pl
>

Todd Benson

4/2/2008 2:32:00 PM

0

On Wed, Apr 2, 2008 at 8:20 AM, Oliver Saunders
<oliver.saunders@gmail.com> wrote:
> Given that:
>
> %r{(\w,)+}.match('a,b,c')[0] #=> "a,b,"
>
> and
>
> %r{(\w,)+}.match('a,b,c')[1] #=> "b,"
>
> How do I access the capture that contains "a,"?

Maybe leave the plus symbol (+) out?

r = /(\w,)/
r.match('hi,a,b,c')[1]
=> "i,"

I'd probably use #scan, or even #split, instead.

Todd

Todd Benson

4/2/2008 2:39:00 PM

0

On Wed, Apr 2, 2008 at 9:27 AM, Robert Dober <robert.dober@gmail.com> wrote:
> Use scan
>
> "a,b,c".scan(/\w+,/) --> ['a,', 'b,']
> and in order to have the whole match you have to join the result of scan again.
>
> HTH
> Robert

Yeah, I was thinking of that regexp also, but I assumed the OP wanted
the last word letter before a comma.

Oliver, what is it that you're looking for?

Todd

Oliver Saunders

4/2/2008 3:28:00 PM

0

Nevermind. I was trying to parse CSV. I thought pre-written tools
weren't capable of understanding quoted values with commas inside but I
was wrong so I can use them.

I do find it amazing that you can't access multiple matches for a single
sub-pattern though. That's a serious limitation IMO.
--
Posted via http://www.ruby-....

Todd Benson

4/2/2008 3:45:00 PM

0

On Wed, Apr 2, 2008 at 10:28 AM, Oliver Saunders
<oliver.saunders@gmail.com> wrote:
> Nevermind. I was trying to parse CSV. I thought pre-written tools
> weren't capable of understanding quoted values with commas inside but I
> was wrong so I can use them.
>
> I do find it amazing that you can't access multiple matches for a single
> sub-pattern though. That's a serious limitation IMO.

I'm not sure I understand this correctly, because I think your pattern
was wrong.

Todd