尝试以下操作:
$strings = array(
'word, word word',
'word word, word, word',
'word "word, word, word" word, word',
'word "word, word, word" dot dot "ignore, ignore" word, word',
'word \'word, word\' word, word'
);
foreach($strings as $string){
echo $string. ' : '. find($string).'<br>';
}
function find($str){
$tmp = preg_replace_callback('/("[^"]+")/', function($m){
return str_repeat('a',strlen($m[1]));
}, $str);
return strpos($tmp, ',');
}
想法:用“a”替换引号之间的所有字符,然后使用strpos()。
输出:
word, word word : 4
word word, word, word : 9
word "word, word, word" word, word : 28
word "word, word, word" dot dot "ignore, ignore" word, word : 53
word 'word, word' word, word : 10
在线演示。