$re = '/(?<!\bnot saying )(?<!\bnot saying that )(?<!\bnot that )(\b(?:you\'?r?e?|u|op\'?s?)) (\b(?:are|is))? ?(\ban?)? ?(\b(?:absolute|total))? ?(\bfuck(en|ing?))? ?(\binsult)/mi';
$str = '* OP is an absolute insult
* You are a insult
* You are a total fuckin insult
* not saying you are an insult';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php