Simple regexp help needed - pull phrase out of string

Hey folks. I feel like this should be easy but it's been a long week
and my brain hurts.

If i have a string like this:

string = "pending: sent at Thu Oct 09 17:25:08 +0100 2008,
password:banana errors: couldn't find user with id 230"

and i want to pull out 'banana', what's an elegant way to do it? The
password will always be followed by a space.

I can think of this:
string.match(/password:[^\s]+/)[0].gsub("password:","")

but it seems a bit clumsy and error prone. Is there a nicer way?
(Passwords can contain non alphanumeric characters btw)

···

--
Posted via http://www.ruby-forum.com/.

Hey folks. I feel like this should be easy but it's been a long week
and my brain hurts.

If i have a string like this:

string = "pending: sent at Thu Oct 09 17:25:08 +0100 2008,
password:banana errors: couldn't find user with id 230"

and i want to pull out 'banana', what's an elegant way to do it? The
password will always be followed by a space.

I can think of this:
string.match(/password:[^\s]+/)[0].gsub("password:","")

but it seems a bit clumsy and error prone. Is there a nicer way?
(Passwords can contain non alphanumeric characters btw)

string = "pending: sent at Thu Oct 09 17:25:08 +0100 2008,

password:banana errors: couldn't find user with id 230"
=> "pending: sent at Thu Oct 09 17:25:08 +0100 2008,\npassword:banana errors: couldn't find user with id 230"

string.match(/password:(.*) errors:/)[1]

=> "banana"

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Oct 9, 2008, at 12:31 PM, Max Williams wrote:

Hello Max,

Maybe you can try this regex pattern:

    irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
    => ["banana"]

Regards,
Patrick

Max Williams wrote:

···

Hey folks. I feel like this should be easy but it's been a long week
and my brain hurts.

If i have a string like this:

string = "pending: sent at Thu Oct 09 17:25:08 +0100 2008,
password:banana errors: couldn't find user with id 230"

and i want to pull out 'banana', what's an elegant way to do it? The
password will always be followed by a space.

I can think of this:
string.match(/password:[^\s]+/)[0].gsub("password:","")

but it seems a bit clumsy and error prone. Is there a nicer way?
(Passwords can contain non alphanumeric characters btw)

Patrick He wrote:

Hello Max,

Maybe you can try this regex pattern:

    irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
    => ["banana"]

Regards,
Patrick

Aha, 'scan', that's great thanks.

···

--
Posted via http://www.ruby-forum.com/\.

Max Williams wrote:

> irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
> => ["banana"]

Aha, 'scan', that's great thanks.

Yeah, though not really the most sensible in this case. Also you'd have to do
[0][0] to acutally get "banana". I'd only use scan when you actually want
multiple matches. Here I'd use match or String#:
string[/password:(\S+)/, 1]
=> "banana"

···

--
NP: Die Apokalyptischen Reiter - Der Weg
Jabber: sepp2k@jabber.org
ICQ: 205544826

Even better, many thanks.

···

--
Posted via http://www.ruby-forum.com/.