simple regexp help needed - pull phrase out of string

M

Max Williams

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)
 
R

Rob Biedenharn

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)

irb> 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"
irb> string.match(/password:(.*) errors:/)[1]
=> "banana"

-Rob

Rob Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 
P

Patrick He

Hello Max,

Maybe you can try this regex pattern:

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


Regards,
Patrick
 
M

Max Williams

Patrick said:
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.
 
S

Sebastian Hungerecker

Max said:
=C2=A0 =C2=A0 irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
=C2=A0 =C2=A0 =3D> ["banana"]

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

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

=2D-=20
NP: Die Apokalyptischen Reiter - Der Weg
Jabber: (e-mail address removed)
ICQ: 205544826
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,199
Messages
2,571,045
Members
47,643
Latest member
ashutoshjha_1101

Latest Threads

Top