Forum: Ruby Copying $1.. A loop with two regular expressions

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
E4ba761cb171f74c8b77295178ea8a3f?d=identicon&s=25 Oky (Guest)
on 2006-04-06 01:14
Hi, sorry if this is a stupid question.. i've only been programming ruby
for about six hours.

I'm trying to white a loop to parse through a webpage and get all the
links to other pages. This loop depends on a regular expression to find
all the <a href tags.. but inside the loop there is another regular
expression which looks to see if the link is relative or static. The
problem is the inner regular expression changes the $1 variable so the
loop just fails on the first iteration. I've tried making a copy of the
$1 variable but the result just ends up containing nil.

Any help you could offer would be gratefully appreciated

Hears my code so far:

    	loop do
    	 	url = $1
    		puts $1    #A url
    		puts $url  #Always nil ?

     		if $1 =~ /^http/  //Inner regular expression
    			new_url = host + path
    		else
    			new_url = path
    		end

    		newPage = WebPage.new(new_url, link_depth + 1)

    	break unless url =~ @@ahref_filter
    	end
C1bcb559f87f356698cfad9f6d630235?d=identicon&s=25 Hal Fulton (Guest)
on 2006-04-06 01:20
(Received via mailing list)
Oky wrote:
> Hi, sorry if this is a stupid question.. i've only been programming ruby
> for about six hours.
>
> I'm trying to white a loop to parse through a webpage and get all the
> links to other pages. This loop depends on a regular expression to find
> all the <a href tags.. but inside the loop there is another regular
> expression which looks to see if the link is relative or static. The
> problem is the inner regular expression changes the $1 variable so the
> loop just fails on the first iteration. I've tried making a copy of the
> $1 variable but the result just ends up containing nil.

Are you trying to use a command line argument? If so, try ARGV[1]
instead of $1 (which is a global variable storing the text of the
first subexpression in the most recent match.


Hal
E4ba761cb171f74c8b77295178ea8a3f?d=identicon&s=25 Oky (Guest)
on 2006-04-06 01:38
Hi Hal,

Thank you for your reply

No i'm not trying to use a command line argument, just use a loop which
uses two regular expression. After having a fresh look at the code i
spotted my mistake (url = $1 should have been url = $') and it seams to
work now. Although I still don't understand why I can't copy the $1
variable (doller_one = $1 equals nil?) but it doesn't matter to much now
as ruby lets you copy the $' variable.

Thank very much for taking the time to reply

Oky
0817571d150afead454f4220007042fe?d=identicon&s=25 Matthew Desmarais (Guest)
on 2006-04-06 01:48
(Received via mailing list)
Hi there,

Oky wrote:
>
> Any help you could offer would be gratefully appreciated
>
> Hears my code so far:
>
>     	loop do
>     	 	url = $1
>     		puts $1    #A url
>     		puts $url  #Always nil ?
>
Here's _a_ problem for you to start with.  You've assigned the value of
1 to the local variable url.  When you puts $url, you are examining and
printing the global variable $url.  Since you haven't assigned anything
to $url yet, it is nil.

In Ruby an unadorned name like "url" is either a local variable or
method call.  Putting a "$" on the front of something tells Ruby that
you want to refer to a global.

So try changing the "$url" to "url" and see what happens.

I hope it's something good.

Matthew
0817571d150afead454f4220007042fe?d=identicon&s=25 Matthew Desmarais (Guest)
on 2006-04-06 01:51
(Received via mailing list)
Matthew Desmarais wrote:
>> static. The problem is the inner regular expression changes the $1
>>             puts $1    #A url
>
> So try changing the "$url" to "url" and see what happens.
>
> I hope it's something good.
>
> Matthew
>
Huh.

Try "You've assigned the value of $1 to the local variable url."
That'll make more sense (maybe).

Sheesh.  Sorry. ;-)
E4ba761cb171f74c8b77295178ea8a3f?d=identicon&s=25 Oky (Guest)
on 2006-04-06 02:01
Thanks Matthew,

Your absolutely right. A schoolboy mistake from me :S I come from a
C++/Asm background and havenâ??t got the hang of all these undefined
variables yet.


Thanks again for your reply
0817571d150afead454f4220007042fe?d=identicon&s=25 Matthew Desmarais (Guest)
on 2006-04-06 02:09
(Received via mailing list)
Oky wrote:
> Thanks Matthew,
>
> Your absolutely right. A schoolboy mistake from me :S I come from a
> C++/Asm background and havenâ??t got the hang of all these undefined
> variables yet.
>
>
> Thanks again for your reply
>
No problem!  I'm glad that I could help.

Have fun!
This topic is locked and can not be replied to.