in reply to Regex problem i think?

The following test script based on your sample works as expected. Maybe you can modify it to show the problem you see? Keep it as a stand alone test script though!

use strict; use warnings; my @strings = ( "APPCRASH.", "he protected system file.", "EMET_DLL Module logged the following event:.", "your virus/spyware.", "A new process has been created\..", "A service was installed in the system\..", "A scheduled task was created\..", "Logon Type:[\\W]*(3|10).", "\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run.", "service terminated unexpectedly\..", "service was successfully sent a.", "service entered the.", "service was changed from." ); while (defined (my $info = <DATA>)) { for my $string (@strings) { chomp $info; if ($info =~ /\Q$string\E/) { print "Line # $.: '$string' --> '$info'\n"; } } } __DATA__ APPCRASH. nothing to see here Part sentence: service entered the.

You can avoid the explicit loop over strings by constructing a combined match expression:

use strict; use warnings; my @strings = ( "APPCRASH.", "he protected system file.", "EMET_DLL Module logged the following event:.", "your virus/spyware.", "A new process has been created\..", "A service was installed in the system\..", "A scheduled task was created\..", "Logon Type:[\\W]*(3|10).", "\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run.", "service terminated unexpectedly\..", "service was successfully sent a.", "service entered the.", "service was changed from." ); my $match = join '|', map {qr/\Q$_\E/} @strings; while (defined (my $info = <DATA>)) { chomp $info; next if $info !~ /($match)/; print "Line # $.: '$1' --> '$info'\n"; } __DATA__ APPCRASH. nothing to see here Part sentence: service entered the.
Perl is the programming world's equivalent of English

Replies are listed 'Best First'.
Re^2: Regex problem i think?
by StalkinYerMa (Initiate) on Sep 10, 2014 at 11:32 UTC
    im going to try this out to see if it work's thanks for the reply, if you get time do you think you could describe what the join is doing im not very good with regex's

      See: join, perlretut, perlre and perlreref. Regular expressions are a language in their own right, a major player in Perl's team of tools, and have been adopted by many tools other than Perl. They are well worth becoming familiar with. It's at least worth knowing where to find documentation.

      The short version is: | is the alternation character. The match will succeed if any of the alternate matches separated by the | succeed. Join glues a list of strings together using the first string as the glue.

      If you are serious about learning and using Perl I strongly recommend you get a copy of the Perl Pocket Reference.

      Perl is the programming world's equivalent of English