Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как изменить строки в тексте на разные значения?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Rooner
Отправлено: 06 Декабря, 2012 - 12:18:55
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Как пройти по данному тексту и заменить [a] на [1], [b] на [dva] и т.д.? Т.е. заменять нужно на разные значения.
PHP:
скопировать код в буфер обмена
  1. $sText='<p>[a]</p>
  2.    <p>Раз Раз Раз Раз Раз Раз</p>
  3.    <p>[b]</p>
  4.    <p>Два Два Два Два Два Два Два Два</p>
  5.    <p>[c]</p>
  6.    <p>Три Три Три Три </p>';

Должно получиться это:
PHP:
скопировать код в буфер обмена
  1. $sText='<p>[1]</p>
  2.    <p>Раз Раз Раз Раз Раз Раз</p>
  3.    <p>[dva]</p>
  4.    <p>Два Два Два Два Два Два Два Два</p>
  5.    <p>[0003]</p>
  6.    <p>Три Три Три Три </p>';
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2012 - 12:21:41
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner пишет:
Т.е. заменять нужно на разные значения.

Уточните.
Пока что Вам подойдет даже:
PHP:
скопировать код в буфер обмена
  1. $sText=str_replace(array('[a]', '[b]', '[c]'), array('[1]', '[dva]', '[0003]'), $sText);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 12:24:43
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




EuGen, начальные значения [a], [b], [c] не известны, в квадратных скобках могут быть разные значения, например даты, их нужно заменить на новые известные значения
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2012 - 12:25:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner
Тогда как понять соответствие? Иными словами, как понять, какое конкретно неизвестное значение на какое точно известное значение нужно поменять?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 12:26:25
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Самый муторный и наверное медленный способ это пройтись в цикле по всему тексту перебирая каждый символ и заменяя то, что между квадратных скобок.
(Добавление)
EuGen, я представляю себе это так:
идем по тексту сверху вниз, встречаем квадратные скобки, заменяем значение на [новое значение 1], идем дальше, снова находим скобки, заменяем значение на [новое значение 2] и т.д.
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2012 - 12:34:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner пишет:
я представляю себе это так:
идем по тексту сверху вниз, встречаем квадратные скобки, заменяем значение на [новое значение 1], идем дальше, снова находим скобки, заменяем значение на [новое значение 2] и т.д.

- то есть Вы уверены, что в тексте, например, [a] не встретится более 1-го раза? (иначе мы одинаковые значения заменим на разное)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 12:38:08
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




EuGen, на месте всех начальных значений может быть [newpost], и тогда менять их нужно по очереди
 
 Top
esterio
Отправлено: 06 Декабря, 2012 - 12:39:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




А почему не сделать так
PHP:
скопировать код в буфер обмена
  1. $replace = array(
  2.         '[a]' => '[1]',
  3.         '[b]' => '[dva]',
  4.         '[c]' => '[0003]'
  5. );
  6. $sText=str_replace(array_keys($replace), array_values($replace), $sText);


Просто нужно сформировать массив $replace, где ключи - чт заменять, а значения - на что заменять.
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2012 - 12:47:05
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner
То есть соответствие определяется просто порядком следования. Понятно. Тогда
PHP:
скопировать код в буфер обмена
  1. $sText='<p>[a]</p>
  2. <p>Раз Раз Раз Раз Раз Раз</p>
  3. <p>[b]</p>
  4. <p>Два Два Два Два Два Два Два Два</p>
  5. <p>[c]</p>
  6. <p>Три Три Три Три </p>';
  7.  
  8. $rgValues = array('[one]','[two]','[three]');
  9. preg_match_all('/\[[^\[\]]\]/', $sText, $rgMatches);
  10. $sText    = str_replace($rgMatches[0], $rgValues, $sText);

(имеется ввиду, что $rgValues содержит известные Вам значения, на которые требуется заменить)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 12:47:26
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




esterio, вместо [а], [ b], [c] будут даты, это просто так я написал, дак вот эти даты не известны, вообще не должно быть важно что между скобок... в этом вся сложность
(Добавление)
EuGen, вот так я и хотел, но с 1 символом работает, а так нет
PHP:
скопировать код в буфер обмена
  1. $sText='<p>[newpost 06.12.12]</p>
  2.    <p>Раз Раз Раз Раз Раз Раз</p>
  3.    <p>[newpost 08.12.12]</p>
  4.    <p>Два Два Два Два Два Два Два Два</p>
  5.    <p>[newpost 10.12.12]</p>
  6.    <p>Три Три Три Три </p>';
  7.  
  8. $rgValues = array('[one]','[two]','[three]');
  9. preg_match_all('/\[[^\[\]]\]/', $sText, $rgMatches);
  10. $sText    = str_replace($rgMatches[0], $rgValues, $sText);

(Отредактировано автором: 06 Декабря, 2012 - 12:53:38)

 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2012 - 12:55:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner пишет:
но с 1 символом работает, а так нет

Разумеется, ведь я так составил выражение (полагая, что символ будет один). Если там может быть то, что Вы указали, то:


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 06 Декабря, 2012 - 12:58:36
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




EuGen, шикарно, спасибо Радость
У меня от этих скобок в глазах рябит)
 
 Top
Rooner
Отправлено: 08 Декабря, 2012 - 10:44:29
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\[[^\[\]]*\]/', $cu_text, $rgMatches);

В $rgMatches[0] лежат значения, которые между скобок, а как получить текст который после скобок?
Например вот текст:
CODE (html):
скопировать код в буфер обмена
  1. [08.12.2012 15:04:07]
  2. Раз Раз Раз Раз Раз Раз
  3. [08.12.2012 15:54:07]
  4. Два Два Два Два Два Два Два Два
  5. [08.12.2012 16:44:07]
  6. Три Три Три Три


Нужно получить массив
CODE (html):
скопировать код в буфер обмена
  1. [0][0][08.12.2012 15:04:07]
  2.    [1]Раз Раз Раз Раз Раз Раз
  3.  
  4. [1][0][08.12.2012 15:54:07]
  5.    [1]Два Два Два Два Два Два Два Два
  6.  
  7. [2][0][08.12.2012 16:44:07]
  8.    [0]Три Три Три Три
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Декабря, 2012 - 10:52:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




/\[[^\[\]]\]<(\w+)>(.+)<\/(\\1)>/

(Отредактировано автором: 08 Декабря, 2012 - 10:52:44)

 
 Top
Rooner
Отправлено: 08 Декабря, 2012 - 11:08:40
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




DeepVarvar, результат должен быть в $rgMatches? Чето там пустые значения
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB