PDA

Просмотр полной версии : php|preg_replace


MorgaN
22.03.2010, 17:18
Здравствуйте!
Вообщем такая вот проблемка.
Есть такая функция:
function HelpMenuParser($txt)
{
$Catsk = МАССИВ С ДАННЫМИ;
foreach ($Catsk as $Catk)
{
$StringSplit = explode(',', $Catk[1]);
foreach ($StringSplit as $StringSplits)
{
$txt = preg_replace( "#(".$StringSplits.")#is", "<text title='".$Catk[2]."' style='cursor:nw-resize'>$1</text>", $txt);

}
}
return $txt;
}
Как сделать так, чтобы эта функция не заменяла то, что уже заменила?
Т.е. например она заменила слово 'текст' на:
<text title='тттттттт' style='cursor:nw-resize'>текст</text>
а затем заменяет эту строку повторно, и получается:
<text title='тттттттт' style='cursor:nw-resize'><text title='тттттттт' style='cursor:nw-resize'>текст</text></text>
Ну это при условии что в переменной $Catk[1] хранится 'текст,текст'.
Помогите пожалуйста...

Ringo
22.03.2010, 18:49
morgan,
попробуй
$txt = preg_replace( "#(".$StringSplits.")#is", "<text title='".$Catk[2]."' style='cursor:nw-resize'>$1</text>", $txt, 1);

Добавлено через 3 минуты
morgan, что-то у тебя в коде много неопределённых переменных =\ Показалось (:

MorgaN
22.03.2010, 20:44
morgan, попробуй
Не, немного не то...
Так он заменяет один раз, а нужно чтоб заменял все совпадения, но не заменял то что было добавлено при первой замене.

Ringo
22.03.2010, 20:58
morgan, ясно. Если электричество перестанет вырубать - посмотрю что да как.
Можешь скинуть примерный вид массива $Catsk чтоб условия тестирования похожи были? (:
ЗЫ. pattern же должен быть обёрнуть в слэши - \
не?

Добавлено через 6 минут
morgan, слушай, создай пустой файл,
скопипасть тцда функцию и запусти её один раз, тоже заменять дважды будет?
У тебя просто аргумент функции $txt нигде не используется и функция всё время обрабатывает одни и те же данные.

MorgaN
22.03.2010, 21:20
ЗЫ. pattern же должен быть обёрнуть в слэши - \
Нет, слэшами только вроди спец символы экранируются.
скопипасть тцда функцию и запусти её один раз, тоже заменять дважды будет?
Вообщем по функции же видно, что она разделяет ячейку массива $Catk[1] на части, отделяя каждую часть по запятой.
Массив $Catk:
$Catk[0] = тут хранится идентификатор id
$Catk[1] = [Рр]едактор реестра,[Рр]еестр,[Рр]еестра
$Catk[2] = Сведения о настройках операционной системы
Windows хранятся централизованно в иерархической
базе данных, называемой реестром. Чтобы
добавлять и редактировать разделы и параметры
реестра, восстанавливать реестр из резервной
копии или восстанавливать значения по умолчанию,
а также чтобы импортировать или экспортировать
разделы для ссылок или сохранения, используйте
редактор реестра.
Вызывается командой:
Пуск => выполнить => regedit.exe
поэтому получается, что два раза заменяет, т.к. в ячейке 1 есть слово которое есть в ячейке 2.

Попробуйте передать функции такой текст:
текст редактор реестра текст