Battle Forum

Battle Forum (http://forum.battlefox.ru/index.php)
-   Web-программирование / Сайтостроение (http://forum.battlefox.ru/forumdisplay.php?f=110)
-   -   php|preg_replace (http://forum.battlefox.ru/showthread.php?t=13980)

MorgaN 22.03.2010 17:18

php|preg_replace
 
Здравствуйте!
Вообщем такая вот проблемка.
Есть такая функция:
PHP код:

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,
попробуй
PHP код:

$txt preg_replace"#(".$StringSplits.")#is""<text title='".$Catk[2]."' style='cursor:nw-resize'>$1</text>"$txt1); 

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

MorgaN 22.03.2010 20:44

Цитата:

Сообщение от Ringo (Сообщение 433263)
morgan, попробуй

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

Ringo 22.03.2010 20:58

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

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

MorgaN 22.03.2010 21:20

Цитата:

Сообщение от Ringo (Сообщение 433298)
ЗЫ. pattern же должен быть обёрнуть в слэши - \

Нет, слэшами только вроди спец символы экранируются.
Цитата:

Сообщение от Ringo (Сообщение 433298)
скопипасть тцда функцию и запусти её один раз, тоже заменять дважды будет?

Вообщем по функции же видно, что она разделяет ячейку массива $Catk[1] на части, отделяя каждую часть по запятой.
Массив $Catk:
Цитата:

$Catk[0] = тут хранится идентификатор id
$Catk[1] = [Рр]едактор реестра,[Рр]еестр,[Рр]еестра
$Catk[2] = Сведения о настройках операционной системы
Windows хранятся централизованно в иерархической
базе данных, называемой реестром. Чтобы
добавлять и редактировать разделы и параметры
реестра, восстанавливать реестр из резервной
копии или восстанавливать значения по умолчанию,
а также чтобы импортировать или экспортировать
разделы для ссылок или сохранения, используйте
редактор реестра.
Вызывается командой:
Пуск => выполнить => regedit.exe
поэтому получается, что два раза заменяет, т.к. в ячейке 1 есть слово которое есть в ячейке 2.

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

текст редактор реестра текст


Текущее время: 23:22. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot