With the help of user MizardX from #regex irc channel (irc.freenode.net) solution was found. It even supports single quotes.
$str= 'word1 word2 'this is a phrase' word3 word4 "this is a second phrase" word5 word1 word2 "this is a phrase" word3 word4 "this is a second phrase" word5';
$regexp = '/G(?:"[^"]*"|'[^']*'|[^"'s]+)*Ks+/';
$arr = preg_split($regexp, $str);
print_r($arr);
Result is:
Array (
[0] => word1
[1] => word2
[2] => 'this is a phrase'
[3] => word3
[4] => word4
[5] => "this is a second phrase"
[6] => word5
[7] => word1
[8] => word2
[9] => "this is a phrase"
[10] => word3
[11] => word4
[12] => "this is a second phrase"
[13] => word5
)
PS. Only disadvantage is that this regexp works only for PCRE 7.
It turned out that I do not have PCRE 7 support on production server, only PCRE 6 is installed there. Even though it is not as flexible as previous one for PCRE 7, regexp that will work is (got rid of G and K):
/(?:"[^"]*"|'[^']*'|[^"'s]+)+/
For the given input result is the same as above.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…