Splitting a string

I've got a problem when trying to split a string after the thrid
occurrence of a slash ('/'), I'm so used to java-thinking so I keep
wanting to iterate through it and save the position of the third
occurence and then cut the string at that index.

This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
it?
Grateful for any assistance,
Lars

···

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

Alle giovedì 28 giugno 2007, Lars Andren ha scritto:

I've got a problem when trying to split a string after the thrid
occurrence of a slash ('/'), I'm so used to java-thinking so I keep
wanting to iterate through it and save the position of the third
occurence and then cut the string at that index.

This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
it?
Grateful for any assistance,
Lars

There may be better solutions, but this should work:

str.scan(/(?:[^\/]+(?:\/|$)){3}/)

This returns an array of strings obtained by splitting str after every
third /. The last entry of the array contains the rest of the string:

'a/b/cd/efg/h/i'.scan(/(?:[^\/]+(?:\/|$)){3}/)
=> ["a/b/cd/", "efg/h/i"]

I hope this helps

Stefano

Depends on what you want to do, i.e. which part(s) of the string you need. You can do

irb(main):003:0> s = (1..5).to_a.join '/'
=> "1/2/3/4/5"
irb(main):008:0> %r<\A((?:[^/]*/){2}[^/]*)/(.*)\z> =~ s
=> 0
irb(main):009:0> pre, post = $1, $2
=> ["1/2/3", "4/5"]
irb(main):010:0>

Or

irb(main):011:0> s[%r<\A((?:[^/]*/){2}[^/]*)/>]
=> "1/2/3"

Or...

Kind regards

  robert

···

On 28.06.2007 13:51, Lars Andren wrote:

I've got a problem when trying to split a string after the thrid
occurrence of a slash ('/'), I'm so used to java-thinking so I keep
wanting to iterate through it and save the position of the third
occurence and then cut the string at that index.

This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
it?

Thanks a lot both of you! I can use Stefanos method since I only want to
use the part of the string before the third occurrence.
Lars

Stefano Crocco wrote:

···

Alle giovedì 28 giugno 2007, Lars Andren ha scritto:

I've got a problem when trying to split a string after the thrid
occurrence of a slash ('/'), I'm so used to java-thinking so I keep
wanting to iterate through it and save the position of the third
occurence and then cut the string at that index.

This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
it?
Grateful for any assistance,
Lars

There may be better solutions, but this should work:

str.scan(/(?:[^\/]+(?:\/|$)){3}/)

This returns an array of strings obtained by splitting str after every
third /. The last entry of the array contains the rest of the string:

'a/b/cd/efg/h/i'.scan(/(?:[^\/]+(?:\/|$)){3}/)
=> ["a/b/cd/", "efg/h/i"]

I hope this helps

Stefano

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

In that case you can do

str.split("/")[0..2].join("/")

Cheers
Robert

···

On 6/28/07, Lars Andren <lars.andren@asia.chalmers.se> wrote:

Thanks a lot both of you! I can use Stefanos method since I only want to
use the part of the string before the third occurrence.
Lars

--
I always knew that one day Smalltalk would replace Java.
I just didn't know it would be called Ruby
-- Kent Back