[lnkForumImage]
TotalShareware - Download Free Software

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


 

Josselin

9/1/2007 5:29:00 PM

I don't manage very well the gsub function, not too bad with simple
one, but when it comes to string containing slashes, I totally mess it..

my string can be srt = "/cities/31550/posts;search"

and I would like
1- detect that srt is a string of this type /cities/ nnnnn
/posts;search" where nnnnn is a number between 1 and 99999

2- if srt is of this type, then replace the number nnnnn by another one ppppp

don't know how to do that in one DRY command...

thanks to the gsub guru ....

btw : what's the best link to learn more abour gsub... ?

2 Answers

Sebastian Hungerecker

9/1/2007 5:53:00 PM

0

Josselin wrote:
> I don't manage very well the gsub function, not too bad with simple
> one, but when it comes to string containing slashes, I totally mess it..

Use %r{your_regex} instead of /your_regex/ - then you don't have to escape the
slashes.

> my string can be srt = "/cities/31550/posts;search"
>
> and I would like
> 1- detect that srt is a string of this type /cities/ nnnnn
> /posts;search" where nnnnn is a number between 1 and 99999

%r{/cities/(\d{1,5})/posts;search}
\d{1,5} is "one to five digits" and the parens tell it to remember that as
group 1.

> 2- if srt is of this type, then replace the number nnnnn by another one
> ppppp

srt.sub(%r{/cities/(\d{1,5})/posts;search}) do
new_number=$1.to_i * 2 # (Or however the new number is calculated)
"/cities/#{new_number}/posts;search"
end
If the new number is fixed (i.e. it doesn't depend on the old number), you can
just do:
srt[%r{/cities/(\d{1,5})/posts;search},1]="102943"

> btw : what's the best link to learn more abour gsub... ?

There's not much to gsub itself. It's just string.gsub(re,str) or
string.gsub(re) {|match| do_something; return a string}
What you want to learn more about are regular expressions.
You can do that at at www.regular-expressions.info


HTH,
Sebastian
--
NP: In Flames - Dead Eternity
Jabber: sepp2k@jabber.org
ICQ: 205544826

Josselin

9/2/2007 6:29:00 AM

0

On 2007-09-01 19:53:01 +0200, Sebastian Hungerecker
<sepp2k@googlemail.com> said:

> Josselin wrote:
>> I don't manage very well the gsub function, not too bad with simple
>> one, but when it comes to string containing slashes, I totally mess it..
>
> Use %r{your_regex} instead of /your_regex/ - then you don't have to escape the
> slashes.
>
>> my string can be srt = "/cities/31550/posts;search"
>>
>> and I would like
>> 1- detect that srt is a string of this type /cities/ nnnnn
>> /posts;search" where nnnnn is a number between 1 and 99999
>
> %r{/cities/(\d{1,5})/posts;search}
> \d{1,5} is "one to five digits" and the parens tell it to remember that as
> group 1.
>
>> 2- if srt is of this type, then replace the number nnnnn by another one
>> ppppp
>
> srt.sub(%r{/cities/(\d{1,5})/posts;search}) do
> new_number=$1.to_i * 2 # (Or however the new number is calculated)
> "/cities/#{new_number}/posts;search"
> end
> If the new number is fixed (i.e. it doesn't depend on the old number), you can
> just do:
> srt[%r{/cities/(\d{1,5})/posts;search},1]="102943"
>
>> btw : what's the best link to learn more abour gsub... ?
>
> There's not much to gsub itself. It's just string.gsub(re,str) or
> string.gsub(re) {|match| do_something; return a string}
> What you want to learn more about are regular expressions.
> You can do that at at www.regular-expressions.info
>
>
> HTH,
> Sebastian

Thanks a lot you made my SUnday !!