^start of line
Negative Lookahead(?!.*(?=AA.*XX.*ZZ).*) .*any Unicode character (except for line terminators), repeated any number of times
Positive Lookahead(?=AA.*XX.*ZZ) AAthe literal text AA (case sensitive) .*any Unicode character (except for line terminators), repeated any number of times
XXthe literal text XX (case sensitive) .*any Unicode character (except for line terminators), repeated any number of times
ZZthe literal text ZZ (case sensitive) .*any Unicode character (except for line terminators), repeated any number of times
.*any Unicode character (except for line terminators), repeated any number of times
AAthe literal text AA (case sensitive) .*any Unicode character (except for line terminators), repeated any number of times
ZZthe literal text ZZ (case sensitive) .*any Unicode character (except for line terminators), repeated any number of times
$end of line
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string