Рецепт замены подстроки невходящей в кавычки.

WP

^_^
Рецепт замены подстроки невходящей в кавычки.

Чисто подумалось. Однажды в Клубе был поднят любопытный вопрос. Дается строка:
"bla123 word dggd" word "blgdfg word textdfg"
Надо заменить только второй word т.к. он не в кавычках.
Помнится я тогда написал в лоб циклом: ищем кавычку, заменяем в подстроке до нее, потом ищем закрывающую кавычку, заменяем...
Решение имеет право на жизнь, но сейчас придумалось более изящное:
PHP:
function callback($m)
{
 if (isset($m[1])) {return 'replacement';}
 else {return $m[0];}
}
$string = ' "bla123 word dggd" word "blgdfg word textdfg" ';
echo preg_replace_callback('~".*?"|(word)~','callback',$string);
//  "bla123 word dggd" replacement "blgdfg word textdfg"
Т.е. мы заставляем preg проделать ту же самую работу с циклом ;)

Темы той не нашел, да упокоится она с миром.
 
Сверху