searching for a pattern for multiple matches

searching for a pattern for multiple matches

am 24.11.2007 02:32:36 von jhu

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

Re: searching for a pattern for multiple matches

am 24.11.2007 03:35:27 von Ben Morrow

Quoth jhu :
> 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

Re: searching for a pattern for multiple matches

am 24.11.2007 04:13:21 von jhu

On Nov 23, 6:35 pm, Ben Morrow wrote:
> Quoth jhu :
>
> > 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.

Re: searching for a pattern for multiple matches

am 24.11.2007 05:11:52 von Ben Morrow

Quoth jhu :
> On Nov 23, 6:35 pm, Ben Morrow wrote:
> > Quoth jhu :
> >
> > > 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

Re: searching for a pattern for multiple matches

am 24.11.2007 14:08:42 von rvtol+news

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 "", ) =~ 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/Regexp-Common/lib/Regexp/Com mon/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."

Re: searching for a pattern for multiple matches

am 24.11.2007 20:12:54 von jhu

On Nov 23, 8:11 pm, Ben Morrow wrote:
> Quoth jhu :
>
>
>
>
>
> > On Nov 23, 6:35 pm, Ben Morrow wrote:
> > > Quoth jhu :
>
> > > > 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.

Re: searching for a pattern for multiple matches

am 26.11.2007 11:49:39 von Dave Weaver

On Sat, 24 Nov 2007 11:12:54 -0800 (PST), jhu 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.