in reply to Re: Regex: negative look ahead
in thread Regex: negative look ahead

Hi there I am writing a script with tails a log file and for each line runs multiple regular expressions against it (which are contained in a config file). Below are some examples of the log lines
ERROR 2012-04-02 05:00:18 Error processing Cancel Execution '2012-CSNY +1CMR-1-20120402-1247 52938803o122h090000507' with LHDRSeqId 'CSNY1CMR +1-1333315812780-2759'. [2012-04-02 07:04:27,275][ERROR][101574:Company:japan][analytics.bond. +BondAlibImpl] ALIB license will expire in29 days. Please upgrade lice +nse file under /app/license 2012-04-02 05:00:18,810[ERROR] limitCheck: error while checking instru +ction xxx.core.biz.order.instruction.EquityOrderSubmitInstruction(tsI +d=20120402-090237887-340-509,order=20120402-090237880-767-508:TS)

With my original regular expression I would want to ignore the first two lines but match the third line. Thanks!

Replies are listed 'Best First'.
Re^3: Regex: negative look ahead
by brx (Pilgrim) on Apr 10, 2012 at 14:37 UTC

    It could be a good idea to split the big regex.

    A good example: if you want to match lines with the words 'red' and 'dog'.

    The first idea is often to write something like: $line =~ /red.*dog|dog.*red/

    but there is a better way: $line=~/dog/ and $line=~/red/

    So, it's probably better to treat each exclusion with one regex:  next if /regex/;

    while (my $line = <DATA>) { next if $line =~ /^ERROR.*?Error processing Cancel Execution/; next if $line =~ /ERROR.*?license will expire/; print "Do something with the line: $line"; } __DATA__ ERROR 2012-04-02 05:00:18 Error processing Cancel Execution '2012-CSNY +1CMR-1-20120402-1247 52938803o122h090000507' with LHDRSeqId 'CSNY1CMR +1-1333315812780-2759'. [2012-04-02 07:04:27,275][ERROR][101574:Company:japan][analytics.bond. +BondAlibImpl] ALIB license will expire in29 days. Please upgrade lice +nse file under /app/license 2012-04-02 05:00:18,810[ERROR] limitCheck: error while checking instru +ction xxx.core.biz.order.instruction.EquityOrderSubmitInstruction(tsI +d=20120402-090237887-340-509,order=20120402-090237880-767-508:TS)