problems with Perl RegEx match

Discussion in 'Perl Misc' started by mitch, Dec 28, 2004.

  1. mitch

    mitch Guest

    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
    mitch, Dec 28, 2004
    #1
    1. Advertising

  2. mitch wrote:
    > 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?

    --
    Gunnar Hjalmarsson
    Email: http://www.gunnar.cc/cgi-bin/contact.pl
    Gunnar Hjalmarsson, Dec 28, 2004
    #2
    1. Advertising

  3. mitch

    Lars Eighner Guest

    In our last episode,
    <>, the
    lovely and talented mitch broadcast on comp.lang.perl.misc:

    > 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 "[^/]"


    > 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


    --
    Lars Eighner http://www.io.com/~eighner/
    Behaviorism is the art of pulling habits out of rats. -- O'Neill
    Lars Eighner, Dec 28, 2004
    #3
  4. mitch

    mitch Guest

    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
    mitch, Dec 28, 2004
    #4
  5. mitch

    Peter Wyzl Guest

    "mitch" <> wrote in message
    news:...
    : 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)

    --
    Wyzelli
    Peter Wyzl, Dec 28, 2004
    #5
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Rick Venter

    perl regex to java regex

    Rick Venter, Oct 29, 2003, in forum: Java
    Replies:
    5
    Views:
    1,604
    Ant...
    Nov 6, 2003
  2. hiwa
    Replies:
    0
    Views:
    627
  3. Replies:
    2
    Views:
    589
  4. Replies:
    3
    Views:
    725
    Reedick, Andrew
    Jul 1, 2008
  5. Dominic van der Zypen

    How to make Perl's regex engine "halt" after a match

    Dominic van der Zypen, Feb 18, 2006, in forum: Perl Misc
    Replies:
    14
    Views:
    152
    Wayne M. Poe
    Nov 18, 2006
Loading...

Share This Page