Beefy Boxes and Bandwidth Generously Provided by pair Networks Joe
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Regex question

by ikegami (Patriarch)
on Aug 18, 2005 at 21:58 UTC ( [id://485003]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Regex question

You're being too specific. Your goal is simply to get the last thing between two slashes.

my ($dir) = m{/([^/]+)/[^/]*$};

Notice I changed the regexp's delimiters so I didn't have to escape the slashes.

I removed the if. That will set $dir to undef on failure. Add the if back if you want to keep $dir's previous value on failure.

Technically, you could omit the leading slash from the regexp, but I think it'll be more efficient with it.

Update: Since you mentioned you wanted to study my regexp further, what follows might help. Read from the comments from the bottom up.

my ($dir) = m{ / # Preceeded by a slash. ([^/]+) # Preceeded by non-slashes, the dir. Captured. / # Preceeded by a slash. [^/]* # Preceeded by non-slashes, the file name. $ # End of string. }x;

Update: Oops! I forgot the parens around $dir. Added.

Replies are listed 'Best First'.
Re^2: Regex question
by Roy Johnson (Monsignor) on Aug 18, 2005 at 23:12 UTC
    Could also be done
    m{.*/(.*)/}

    Caution: Contents may have been coded under pressure.

      Or, to mirror the constraints in the OP's regex:

      m{^.* / ([\w-]+) / .*\.txt}x

      Also, the form:

      my $dir; $dir = $1 if ##regex_here##

      is a good idiom to become familiar with.

      Updates:

      • 2005-08.Aug-22 : fixed short-sighted error tlm points out below. I keep getting bit on that. ;-)

      <-radiant.matrix->
      Larry Wall is Yoda: there is no try{} (ok, except in Perl6; way to ruin a joke, Larry! ;P)
      The Code that can be seen is not the true Code
      "In any sufficiently large group of people, most are idiots" - Kaa's Law

        Also, the form:

        my $dir = $1 if ##regex_here##

        is a good idiom to become familiar with.

        Not with my, though. The behavior of my ... if ...; is undefined.

        the lowliest monk

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://485003]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.