Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: More complicated regular expression?

by JavaFan (Canon)
on Jan 26, 2012 at 15:09 UTC ( [id://950113]=note: print w/replies, xml ) Need Help??


in reply to More complicated regular expression?

/has address (\S+)/ and do_something($1);

Replies are listed 'Best First'.
Re^2: More complicated regular expression?
by jaldama (Acolyte) on Jan 26, 2012 at 15:29 UTC
    I'm trying
    if ($found_addr =~ m/address(.*)\d/){ print "$1\n"; }
    But it's cutting off the last digit of the address for some reason.

      And I bet you're getting a space in front of the 74. Your "\d" at the end is matching a single digit character and since it's at the end of your parenthesis grabbing match, it's taking the last character - excluding it from your match.

      Use JavaFan's regex above and all will be well.

        You're right, and JavaFan's code worked perfect. Thanks a lot
      use YAPE::Regex::Explain; print YAPE::Regex::Explain->new( qr/address(.*)\d/ )->explain; __END__ The regular expression: (?-imsx:address(.*)\d) matches as follows: NODE EXPLANATION ---------------------------------------------------------------------- (?-imsx: group, but do not capture (case-sensitive) (with ^ and $ matching normally) (with . not matching \n) (matching whitespace and # normally): ---------------------------------------------------------------------- address 'address' ---------------------------------------------------------------------- ( group and capture to \1: ---------------------------------------------------------------------- .* any character except \n (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ) end of \1 ---------------------------------------------------------------------- \d digits (0-9) ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------

      So .* (matching the most amount possible) followed by \d, a digit. If you want the digit to be captured, move it inside the parens.

Re^2: More complicated regular expression?
by jaldama (Acolyte) on Jan 26, 2012 at 16:29 UTC
    Sweet deal javafan
      Last question. What if the output instead of
      Using domain server: Name: 8.8.8.8 Address: 8.8.8.8#53 Aliases: google.com has address 74.125.113.147
      Comes out on one line like this:
      $ host google.com 8.8.8.8 google.com A 74.125.113.99
      My previous matching idea still cuts off the last digit. I thought using javafan's and searching for A
      /A (\S+)/ and do_something($1);
      Might work but it doesn't seem to. Is there an issue because of the spacing?

        If you change the game, you change the win. Tell us all of the contexts in which you hope to find your desired string.

        JavaFan's regex worked for your first example because you showed a short, unambiguous introduction to your goal string. /\S/ matches on non-whitespace; there's no whitespace in your first example between /has address / and your goal string. Note that the single space following the last 's' is included in the regex.

        Matching on /A/ doesn't work in your second example because the introduction to your goal string is not /A/; it's /A\s+/. This would not be real smart; it's not likely to be unique.

        Formulate your problem clearly. Prepare a short list of all the various forms of input data you expect to see; and for each form, desired output. Then it is easy, even possible, to construct a solution.

        I'm not the guy you kill, I'm the guy you buy. —Michael Clayton
        my ($address) = m{\s+ (?: address | A) \s+ (\S+)}x;

        I still wonder why host should change its output format, anyway.

        perl -ple'$_=reverse' <<<ti.xittelop@oivalf

        Io ho capito... ma tu che hai detto?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://950113]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (5)
As of 2024-04-24 18:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found