$re = '~# Step 1: match all summary tags and skip them using recursive regexes !
(
<summary>
(?:
(?:(?!</?summary\s*>)[\s\S])
|
(?1)
)*
</summary\s*>
)
(*SKIP)(*FAIL)
|
# Step 2 : make sure the line doesn\'t start with bla or function
^(?!\s*(?:function|bla)\s*update)
# Step 3 : just match
.*?update.*~mix';
$str = '<summary>
update record \'djk\'
</summary>
<tester>
function update record \'djk\'
update record \'djk\'
function method update record \'djk\'
bla update
</tester>';
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