problems with Perl RegEx match

M

mitch

Hi folks,

I am working on a what I thought would be fairly simple regular
expression search. I am simply trying to take a full URL (something
like http://www.someurl.com/someDir/file.html) and parse it out into
its components domain and path (domain = www.someurl.com & path =
/someDir/file.html). So I wrote this little script to do just that.
However, I am getting an error when I run my script and I think it has
something to do with my regex function that I am using. So here is the
code snippet of the offending line:

if ($externalLink =~ m/http:\/\/([^\/]+)/) {
$domain = $1;
$path = $';
}

The error that I am getting is this:
Missing right bracket at ./LogPreProcessor_Inetprod.pl line 64, at end
of line
syntax error at ./LogPreProcessor_Inetprod.pl line 64, at EOF
Execution of ./LogPreProcessor_Inetprod.pl aborted due to compilation
errors.

I also tried to modify the script by removing the \ from within the
square brackets:

if ($externalLink =~ m/http:\/\/([^/]+)/) {
$domain = $1;
$path = $';
}

But that too gives me an error:
bash-2.03$ LogPreProcessor_Inetprod.pl inet.log
/http://([^/: unmatched [] in regexp at ./LogPreProcessor_Inetprod.pl
line 26.
bash-2.03$

So I tried a bunch of other variations, wich also did not work. After
consulting several books and googling for some solution, I thought that
I had exhausted all my research possibilities and I thought that the
smart folks in this group could show me the error of my ways.

On a side note, when I used the following search term in google to look
for a solution:

Perl "[^/]"

Google seemed to ignore all those special characters, and simply
returned any page that contained the term 'Perl'. So that was useless.
Thanks for all your help in this matter.

Regards,

Mitch
 
G

Gunnar Hjalmarsson

mitch said:
I am working on a what I thought would be fairly simple regular
expression search. I am simply trying to take a full URL (something
like http://www.someurl.com/someDir/file.html) and parse it out into
its components domain and path (domain = www.someurl.com & path =
/someDir/file.html). So I wrote this little script to do just that.
However, I am getting an error when I run my script and I think it
has something to do with my regex function that I am using. So here
is the code snippet of the offending line:

if ($externalLink =~ m/http:\/\/([^\/]+)/) {
$domain = $1;
$path = $';
}

That code works fine for me.
The error that I am getting is this:
Missing right bracket at ./LogPreProcessor_Inetprod.pl line 64, at
end of line syntax error at ./LogPreProcessor_Inetprod.pl line 64, at
EOF Execution of ./LogPreProcessor_Inetprod.pl aborted due to
compilation errors.

So, what's at (and right before and after) line 64 in your script?
 
L

Lars Eighner

In our last episode,
the said:
Hi folks,
I am working on a what I thought would be fairly simple regular
expression search. I am simply trying to take a full URL (something
like http://www.someurl.com/someDir/file.html) and parse it out into
its components domain and path (domain = www.someurl.com & path =
/someDir/file.html). So I wrote this little script to do just that.
However, I am getting an error when I run my script and I think it has
something to do with my regex function that I am using. So here is the
code snippet of the offending line:
if ($externalLink =~ m/http:\/\/([^\/]+)/) {
$domain = $1;
$path = $';
}

I'm not following all of this but, why make things hard on
yourself. Use any other quote character besides /, and you
won't have to escape them. Also as you would see, if you even
took a glance at perlretoot, / is NOT special in [].

m#http://([^/]+)#

isn't that about 100 times easier to read and work with?

(However, even as it stands, your snippet works fine for
me.)
The error that I am getting is this:
Missing right bracket at ./LogPreProcessor_Inetprod.pl line 64, at end
of line
syntax error at ./LogPreProcessor_Inetprod.pl line 64, at EOF
Execution of ./LogPreProcessor_Inetprod.pl aborted due to compilation
errors.

Useless without all of the code. Pretty likely the problem is
above the snippet.

You know there is a module to parse URLs. So, howcome reinvent
the wheel?
I also tried to modify the script by removing the \ from within the
square brackets:
if ($externalLink =~ m/http:\/\/([^/]+)/) {
$domain = $1;
$path = $';
}
But that too gives me an error:
bash-2.03$ LogPreProcessor_Inetprod.pl inet.log
/http://([^/: unmatched [] in regexp at ./LogPreProcessor_Inetprod.pl
line 26.
bash-2.03$

Yeah, that really doesn't work, even without garbage above it,
but nothing will work because you did not include in the
original snip the part with the real problem.
So I tried a bunch of other variations, wich also did not work. After
consulting several books and googling for some solution, I thought that
I had exhausted all my research possibilities and I thought that the
smart folks in this group could show me the error of my ways.
On a side note, when I used the following search term in google to look
for a solution:
Perl "[^/]"
 
M

mitch

Hi everyone,

Thanks first of all for all the great comments and suggestions. So
Abigail, you were right, I foolishly forgot to close a silly brace.
That should teach me to write code after only sleeping for two hours
(boy do I feel sheepish).

In terms of indenting, my code is beautifully indented, however while
posting it, the tabs and spaces had been removed. Next time I'll add
some HTML code to the posting, just so that it gets formatted properly.


In any event, I appreciate all the comments and thanks again for the
prompt response. It took me literaly 10 seconds to find the missing
brace. I guess sometimes you have been staring too long at the code to
see the problem. I was convinced that the problem was in the RegEx.
Well, live and learn.... thanks again folks.

Regards,

Mitch
 
P

Peter Wyzl

: Hi everyone,
:
: Thanks first of all for all the great comments and suggestions. So
: Abigail, you were right, I foolishly forgot to close a silly brace.
: That should teach me to write code after only sleeping for two hours
: (boy do I feel sheepish).
:
: In terms of indenting, my code is beautifully indented, however while
: posting it, the tabs and spaces had been removed. Next time I'll add
: some HTML code to the posting, just so that it gets formatted properly.

Don't do that. Just replace the tabs with an appropriate number of spaces
(3 or 4 should be fine)
 

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
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top