Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Perl Misc (http://www.velocityreviews.com/forums/f67-perl-misc.html)
-   -   searching for a pattern for multiple matches (http://www.velocityreviews.com/forums/t905477-searching-for-a-pattern-for-multiple-matches.html)

jhu 11-24-2007 01:32 AM

searching for a pattern for multiple matches
 
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 11-24-2007 02:35 AM

Re: searching for a pattern for multiple matches
 

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 11-24-2007 03:13 AM

Re: searching for a pattern for multiple matches
 
On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth jhu <jhu4...@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


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

Ben Morrow 11-24-2007 04:11 AM

Re: searching for a pattern for multiple matches
 

Quoth jhu <jhu4399@yahoo.com>:
> On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> > Quoth jhu <jhu4...@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 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 11-24-2007 01:08 PM

Re: searching for a pattern for multiple matches
 
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/Rege.../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 11-24-2007 07:12 PM

Re: searching for a pattern for multiple matches
 
On Nov 23, 8:11 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth jhu <jhu4...@yahoo.com>:
>
>
>
>
>
> > On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> > > Quoth jhu <jhu4...@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 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- Hide quoted text -
>
> - Show quoted text -


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

Dave Weaver 11-26-2007 10:49 AM

Re: searching for a pattern for multiple matches
 
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.





All times are GMT. The time now is 10:42 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.