Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dla wyjadaczy Wyrażeń Regularnych, Pomoc przy liście wyliczeń
id4
post
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Witam

Dzisiaj mam coś dla wyjadaczy wyrażeń regularnych.
Jeśli ktoś mógłby mi pomóc, byłbym wdzięczny.

Potrzebuję zrobić coś takiego.

- W inpucie wpisuję tekst:
Kod
[ul]
jakieś info /enter/
inne info /enter/
jeszcze inne info /enter/
[/ul]


Chodzi mi teraz o to (zapewne większość sie domyśla), by kod pomiędzy [ul] a [/ul] był wypunktowany, czyli wyrażenie musiałoby zmienić kod na:

  1. <ul>
  2. <li>jakieś info</li>
  3. <li>inne info</li>
  4. <li>jeszcze inne info</li>
  5. </ul>


Czy jest to możliwe do zrealizowania przy pomocy jednego wyrażenia, a jeśli tak, to może ma ktoś takowe? Jeśli nie, to proszę o wskazówki odnoścnie jego napisania. Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
id4
post
Post #2





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Wielkie dzięki @bendi - bardzo mi to pomogło.
Reasumując jednak nie o to mi za bardzo chodziło. W Twoim przykładzie w stringu musi być wyliczenie, a w praktyce jest tam długi tekst, a w nim różne wyliczenia. Dlatego zmodyfikowalem trochę kod, ale nie udało mi się osiągnąć zamierzonego celu. Oto kod:

  1. <?php
  2. $string = preg_replace(&#092;"#[ul](.*?)[/ul]#si\", \"<ul><li>\".preg_replace(\"%n+%\",\"</li><li>\",\"1\").\"</li></ul>\", $string);
  3. ?>


W wyniku tego kodu otrzymuję coś takiego:

  1. <ul><li>
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. </li></ul>


Może ma ktoś chęć zerknąć w mój kod i zmodzić go trochę?
Z góry dziękuję.

--------------------------
EDIT:
--------------------------

Udało mi się wymodzić takie wyrażenie:
  1. <?php
  2. $string = preg_replace_callback(&#092;"/[ul](.*?)[/ul]/si\", create_function('$func','return \"<ul><li>\".str_replace(\"-\",\"</li><li>\",$func[1]).\"</li></ul>\";'), $string);
  3. ?>


Dane wejściowe:
Kod
[ul]
-1
-2
-3
-4
-5
[/ul]


Niby działa dobrze, ale z założenia ma jeden błąd. Mianowicie zawsze na początku listy jest jeden wiersz pusty. Nie wiem jak to wyeliminować. Efekt jest taki:
  1. <ul>
  2. <li></li>
  3. <li>1</li>
  4. <li>2</li>
  5. <li>3</li>
  6. <li>4</li>
  7. <li>5</li>
  8. </ul>


Zawsze pierwszy wiersz jest pusty - jak to wyeliminować? Chodzi mo konkretnie o zmodyfikowanie tego jednego wiersza wyrażenia - bez dodatkowych funkcji zewnętrznych itp. Może ktoś potrafi tego dokonać?

Ten post edytował id4 21.06.2005, 11:50:11
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 17:43