For Programmers: Free Programming Magazines  


Home > Archive > PERL Miscellaneous > November 2007 > searching for a pattern for multiple matches









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author searching for a pattern for multiple matches
jhu

2007-11-23, 10:07 pm

Can anyone tell me using Perl how to find all matching patterns. So if
I have this one big string of say a html web page which contains
multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
\d{1,3} then how do I go about setting up my code in some sort of
while loop to find all instances of matches ? Also can someone in
simple terms explain what a back reference is ? Is it simply the
pattern found ?

Thanks in advance
Ben Morrow

2007-11-23, 10:07 pm


Quoth jhu <jhu4399@yahoo.com>:
> Can anyone tell me using Perl how to find all matching patterns. So if
> I have this one big string of say a html web page which contains
> multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> \d{1,3} then how do I go about setting up my code in some sort of
> while loop to find all instances of matches ?


Use the /g modifier. See 'Regexp Quote-Like Operators' in perldoc
perlop, particularly the section starting "In scalar context, each
execution of "m//g...".

> Also can someone in
> simple terms explain what a back reference is ? Is it simply the
> pattern found ?


perldoc perlretut

Ben

jhu

2007-11-23, 10:07 pm

On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth jhu <jhu4...@yahoo.com>:
>
>
> Use the /g modifier. See 'Regexp Quote-Like Operators' in perldoc
> perlop, particularly the section starting "In scalar context, each
> execution of "m//g...".
>
>
> perldoc perlretut
>
> Ben


Ben thanks but I'm not on Unix or Linux but rather on Windows and
MV6.0.
Ben Morrow

2007-11-24, 4:19 am


Quoth jhu <jhu4399@yahoo.com>:
> On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
>
> Ben thanks but I'm not on Unix or Linux but rather on Windows and
> MV6.0.


Huh? What difference does that make? Do you mean you can't find the
perldocs? perldoc works perfectly well on Win32, or ActivePerl installs
a nice HTMLified version in c:\perl\html.

If you mean 'I'm not actually using Perl, but some other system that
provides Perlish regexen' then: sorry, go ask somewhere else. This
newsgroup is for discussing Perl.

Ben

Dr.Ruud

2007-11-24, 8:04 am

jhu schreef:

> Can anyone tell me using Perl how to find all matching patterns. So if
> I have this one big string of say a html web page which contains
> multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> \d{1,3} then how do I go about setting up my code in some sort of
> while loop to find all instances of matches ?



#!/usr/bin/perl
use strict;
use warnings;

use Regexp::Common;

local $\ = "\n";

(my $big_string = join "", <DATA> ) =~ s/\s*\n\s*/ /g;

print $big_string;
print "-" x 40;

my @ips = $big_string =~ m/$RE{net}{IPv4}/g;

print for @ips;

__DATA__
abc 123.45.6.78 xyz
abc 234.45.68.91 xyz
abc 123.456.78.9 xyz
abc 1.2.3.4 xyz
abc 123.45.678 xyz
abc 234.45.68.910 xyz
abc 1.2.3.4 xyz


See also:
http://search.cpan.org/~abigail/Reg...p/Common/net.pm


> Also can someone in
> simple terms explain what a back reference is ? Is it simply the
> pattern found ?


A backreference is a sub-pattern. (The word pattern is traditionally
reserved for the whole search pattern.)

With a backreference, you reuse something that is already found by an
earlier capture in the pattern:

m/ ([aeiou]) \1 /x; # two vowels, equal
m/ [aeiou]{2} /x; # two vowels, maybe equal


Now read both perlre and perlretut.

In perlre you'll find:
"Referring back to another part of the match is called a backreference."

In perlretut you'll find:
"Backreferences are simply matching variables that can be used inside a
regexp. This is a really nice feature - what matches
later in a regexp can depend on what matched earlier in the regexp."

--
Affijn, Ruud

"Gewoon is een tijger."

jhu

2007-11-24, 7:06 pm

On Nov 23, 8:11 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth jhu <jhu4...@yahoo.com>:
>
>
>
>
>
>
>
>
>
>
>
> Huh? What difference does that make? Do you mean you can't find the
> perldocs? perldoc works perfectly well on Win32, or ActivePerl installs
> a nice HTMLified version in c:\perl\html.
>
> If you mean 'I'm not actually using Perl, but some other system that
> provides Perlish regexen' then: sorry, go ask somewhere else. This
> newsgroup is for discussing Perl.
>
> Ben- Hide quoted text -
>
> - Show quoted text -


Ok I did not understand that I can still view Perl docs online.
Dave Weaver

2007-11-26, 8:07 am

On Sat, 24 Nov 2007 11:12:54 -0800 (PST), jhu <jhu4399@yahoo.com> wrote:

> Ok I did not understand that I can still view Perl docs online.


You don't even have to be online.
Just bring up a command prompt window and use the "perldoc" command.
e.g.:

perldoc perl
perldoc perldoc

If you installed ActiveState's distribution, just go to your Start
Menu -> ActivePerl -> Documentation to get the HTML version.



Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com