/my background error (\d+):(?!.+my3\.exe)/ #### $ perl -Mstrict -Mwarnings -E 'while (<>) { if (/my background error (\d+):(?!.+my3\.exe)/ ) { say $1 } }' blah blah my background error 1234: blah blah 1234 blah blah my background error 1234: blah blah my3.exe blah blah blah my background error 1234: blah blah my4.exe blah 1234 blah blah my background error 1234: my3.exe blah blah my background error 1234:my3.exe 1234 ^C #### /my background error (\d+): ((?!.*my3\.exe).+)/ #### $ perl -Mstrict -Mwarnings -E 'while (<>) { if (/my background error (\d+): ((?!.*my3\.exe).+)/ ) { say qq{$1 = \"$2\"} } else { say q{NO MATCH} } }' blah blah my background error 1234: blah blah 1234 = "blah blah" blah blah my background error 1234: blah blah my3.exe blah NO MATCH blah blah my background error 1234: blah blah my4.exe blah 1234 = "blah blah my4.exe blah" blah blah my background error 1234: my3.exe NO MATCH blah blah my background error 1234:my3.exe NO MATCH blah blah my background error 1234: my4.exe 1234 = "my4.exe" ^C