Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите сделать как в Википедии.
 
 автор: Maxam   (09.05.2010 в 16:49)   письмо автору
 
 

Нужно, чтобы текст:
* текст
* ещё
* и ещё
превращался в
<ul>
<li>текст</li>
<li>ещё</li>
<li>и ещё</li>
</ul>

И тоже самое, но с числовым списком:
# текст
# ещё
# и ещё


Вообщем, как в Википедии )

Из-за чего я сам не могу, так это потому, что не понимаю, как понять в регулярном выражении, где текст-список начинается, чтобы поставить <ul> и где кончается, чтобы поставить </ul>.

Спасибо.

  Ответить  
 
 автор: Tonik992   (10.05.2010 в 09:09)   письмо автору
 
   для: Maxam   (09.05.2010 в 16:49)
 

Всё должна делать лишь одна регулярка? Допустимы циклы и т.д ?

  Ответить  
 
 автор: Maxam   (10.05.2010 в 13:46)   письмо автору
 
   для: Tonik992   (10.05.2010 в 09:09)
 

Да всё что угодно.

  Ответить  
 
 автор: neadekvat   (10.05.2010 в 21:25)   письмо автору
 
   для: Maxam   (09.05.2010 в 16:49)
 

Зачем именно, как в Википедии?
Почему бы не сделать так:
[list]
* пункт 1
* пункт 2
[/list]

Так <ul> и </ul> вы уже быстро найдете, а заодно и место, где надо искать пункты списка.
Что на счет критерия, то, очевидно, если * находится на новой строке, то за * пункт списка.

  Ответить  
 
 автор: Maxam   (10.05.2010 в 22:20)   письмо автору
 
   для: neadekvat   (10.05.2010 в 21:25)
 

Потому что так человеку проще!

  Ответить  
 
 автор: neadekvat   (10.05.2010 в 22:56)   письмо автору
 
   для: Maxam   (10.05.2010 в 22:20)
 

Человеку проще в WYSIWYG

  Ответить  
 
 автор: Trianon   (10.05.2010 в 23:54)   письмо автору
 
   для: Maxam   (10.05.2010 в 22:20)
 

Ой не аргумент.
Иному человеку проще к компьютеру вообще не подходить...

  Ответить  
 
 автор: Maxam   (11.05.2010 в 08:24)   письмо автору
 
   для: Trianon   (10.05.2010 в 23:54)
 

Нужно знать границу между пониманием программиста и обычного пользователя - не забываем, программисты!

  Ответить  
 
 автор: Tonik992   (11.05.2010 в 23:09)   письмо автору
 
   для: Maxam   (11.05.2010 в 08:24)
 


function to2() {
    $text = "* Текст1
* Второй текст
* Третий текст
* четвертый текст
44----
Всё еще четвертый текст
* пятый текст";

    preg_match_all("/\*{1}\040{0,1}([^\*]+)/",$text,$matches);
    echo "<ul>\n";
    for($i=0;$i<count($matches['1']);$i++) {
        echo "<li>". $matches['1'][$i] ."</li>\n";
    }
    echo "</ul>\n";
}
to2();


Вот собственно код.. Создает новый элемент списка при виде значка *.. То есть
* Текст1
* текст2 * текст2.1
* текст 3
преобразует в список с четырьмя а не тремя элементами... Так устроит?
Удаляет 1 символ пробела после *, если есть..
А текст, что в коде, преобразует в "наверное тебе нужный результат":

<ul>
<li>Текст1
</li>
<li>Второй текст
</li>
<li>Третий текст
</li>
<li>четвертый текст
44----
Всё еще четвертый текст
</li>
<li>пятый текст</li>
</ul>

  Ответить  
 
 автор: Maxam   (11.05.2010 в 23:58)   письмо автору
 
   для: Tonik992   (11.05.2010 в 23:09)
 

Спасибо громадное, особенно за ответ по существу!

  Ответить  
 
 автор: Trianon   (12.05.2010 в 01:03)   письмо автору
 
   для: Maxam   (11.05.2010 в 08:24)
 

Вам уже ответил neaadekvat - обычному человеку проще в экранном редакторе, а не потоковом.
Вы же полудохлыми моделями провоцируете создание полудохлого кода.

  Ответить  
 
 автор: Maxam   (12.05.2010 в 01:46)   письмо автору
 
   для: Trianon   (12.05.2010 в 01:03)
 

Я в WYSIWYG щас не разберусь. Может быть потом, но щас - не понимаю устройства. Пока так сделаю, немного по-старинке )

  Ответить  
 
 автор: imustang   (12.05.2010 в 13:58)   письмо автору
 
   для: Maxam   (09.05.2010 в 16:49)
 

голову себе не забивайте в след раз регуляркой ...

$sting_array = explode("\n", $text);
дальше
echo "<ul>"
for ...........
echo "</ul>"

  Ответить  
 
 автор: neadekvat   (12.05.2010 в 14:47)   письмо автору
 
   для: imustang   (12.05.2010 в 13:58)
 

А если я делаю так:
- Пункт списка
Пояснение к этому пункту списка.
Возможно, какие-то дополнения
- Следующий пункт списка.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования