Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> preg_replace, помогите чайнику 
:(
    Опции темы
Wolf1994
Дата 31.7.2005, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Можно ли с помощью preg_replace заменить все пробелы внутри тэгов [codeleftasis] [/codeleftasis]? Как будет выглядеть эта процедура?
Пробовал:
Код

 $temp=preg_replace ("[codeleftasis].* .*[/codeleftasis]", '[codeleftasis].* .*[/codeleftasis]', $temp);

- всё на что хватило информации smile Слишком сложные выражения - не за что ухватиться smile

Это сообщение отредактировал(а) Wolf1994 - 31.7.2005, 07:24
PM MAIL WWW   Вверх
Bikutoru
Дата 31.7.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Не знаю, можно ли сделать такое одним регом, но могу предложить такое решение:
Код

<?php

function changeSpaces($string)
{
    preg_match_all("/\[codeleftasis\](.*)\[\/codeleftasis\]/i", $string, $matches);
    if (!isset($matches[1]))
        return $string;
    
    $changes = array();
    foreach ($matches[1] as $one_match)
        $changes[$one_match] = str_replace(" ", "&nbsp;", $one_match);
    
    $result = $string;
    foreach ($changes as $before => $after)
        $result = str_replace($before, $after, $result);

    return $result;
}


$string = "
[codeleftasis]sdf sd fsdfsd fsd      sdfsd sdf     sdf[/codeleftasis]
g g g g g ghgh gh     ghgh
[codeleftasis]1  2[/codeleftasis]
1 2 3";

echo changeSpaces($string);
?>


Это сообщение отредактировал(а) Bikutoru - 31.7.2005, 10:27


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Рыжий
Дата 31.7.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Во первых - зачем тебе заменять пробел на &nbsp - один и тот же эффект.
Во вторых - зачем использовать реги, когда можно просто str_replace`ом все поменять:

Код

$temp=str_replace(" ","&nbsp",$temp);

PM MAIL ICQ   Вверх
Irokez
Дата 31.7.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Код

$temp=preg_replace ("/[codeleftasis].*\040.*[/codeleftasis]/U", '[codeleftasis].*&nbsp;.*[/codeleftasis]', $temp);

PM   Вверх
Wolf1994
Дата 31.7.2005, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Цитата
Во первых - зачем тебе заменять пробел на &nbsp - один и тот же эффект.

При отображении блока текста с отступами, отступы игнорируются, если не прописать &nbsp;

Цитата
Во вторых - зачем использовать реги, когда можно просто str_replace`ом все поменять:

Для обработки блоков текста у меня используется скрипт, который обрабатывает не только блоки текста, которые должны быть отображениы как код, с прокруткой (как, например, код PHP на этом форуме), но и простой текст - а, если поменять все пробелы на эти символы, то обычные строки просто перестанут переноситься - пробовал.


Bikutoru спасибо. Я думал, что можно как-то просто выполнить эту процедуру. Но раз не получилось - напишу свою процедуру. К сожалению, уровень написания приведённой функции слишком высок для меня - поэтому сделаю как умею, а этот код попытаюсь разобрать, может когда-нибудь пойму. С меня (+), за беспокойство.
Добавлено @ 13:14
Irokez спасибо. Именно то, что я и хотел. Сейчас попробую ;)
Добавлено @ 13:18
Что-то ругается:
Цитата
Warning: Unknown modifier 'c' in w:\home\wolf-ware.ru\www\forum\formtext.php on line 213
smile
PM MAIL WWW   Вверх
Mal Hack
Дата 31.7.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Wolf1994 а что мешает просто при выводе содержимое между жэтими тжэгами вывести в <pre></pre>?
Я когда делал подсвктку синтаксиса так и делал, т.к. с пробелами тоже могут траблы быть.
PM ICQ   Вверх
Wolf1994
Дата 31.7.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Не знаю. Как-то у меня не получилось использовать эти тэги. Но теперь, вручную smile, сделал так как и хотел: http://www.wolf-ware.ru/forum/topic12.html - все пробелы, с которых начинаются строки заполняются тройными "&nbsp;", что делает код более выразительным.
PM MAIL WWW   Вверх
Mal Hack
Дата 31.7.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Wolf1994 попробуй <pre> ;) А для textarea, кстати пробелы, как в html не теряются smile Сколько ввел чтолько и будет
PM ICQ   Вверх
Irokez
Дата 31.7.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Код

$temp=preg_replace ("/\[codeleftasis\].*\040.*\[\/codeleftasis\]/U", '[codeleftasis].*&nbsp;.*[/codeleftasis]', $temp);


Это сообщение отредактировал(а) Irokez - 31.7.2005, 16:47
PM   Вверх
Wolf1994
Дата 31.7.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Цитата
попробуй <pre> ;)

Тогда, отступы в начале строк будут невыразительны? Кстати в учебнике по CSS я <pre> не нашёл (нашёл white-space...)

Цитата
А для textarea, кстати пробелы, как в html не теряются  Сколько ввел чтолько и будет

У меня там не такстовое поле - таблица в div'е с overflow.

Irokez, спасибо. В аналогичных ситуациях буду использовать.
PM MAIL WWW   Вверх
Mal Hack
Дата 31.7.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Wolf1994 @ 31.7.2005, 20:40)
Тогда, отступы в начале строк будут невыразительны? Кстати в учебнике по CSS я <pre> не нашёл (нашёл white-space...)

Там будет столько пробелом, сколько есть.

http://html.manual.ru/book/html/body/textblocks/pre.php
http://www.w3.org/TR/html4/struct/text.html#edef-PRE

Это сообщение отредактировал(а) Mal Hack - 31.7.2005, 19:47
PM ICQ   Вверх
Wolf1994
Дата 1.8.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Спасибо. Все проблемы с текстом решены. Узнал много нового smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2085 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.