If you don't mind my
whoring my own tutorial (you may have read it), the idiom you're looking for is:
Matching a pattern that doesn't include another pattern
You might want to capture everything between foo and bar that doesn't include baz. The technique is to have the regex engine look-ahead at every character to ensure that it isn't the beginning of the undesired pattern:
/foo # Match starting at foo
( # Capture
(?: # Complex expression:
(?!baz) # make sure we're not at the beginning of baz
. # accept any character
)* # any number of times
) # End capture
bar # and ending at bar
/x;
Note that you have to have the lookahead checked for every character you're accepting.
In your case, the
[^\n]+ sub-pattern needs to be adjusted to make sure every character is not the beginning of a Lib:
(?: # Complex expression:
(?!Lib) # make sure we're not at the beginning of Lib
[^\n] # accept any character
)+ # any positive number of times
Caution: Contents may have been coded under pressure.