Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dzielenie ciągu wyrażeniem regularnym, według tagów HTML
mike
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Witam, mam dość nietypowy problem, z którym nie mogę sobie poradzić, ponieważ nie znam wyrażeń regularnych, a nie podejrzewam, że można go rozwiązać w inny sposób.

Problem jest następujący:
Chciałbym z takiego oto ciągu:
Cytat
Jakiś tekst <sup>napisany w </sup> indeksie <sub>dolnym</sub>

uzyskać taką tablicę:
Kod
Array
(
    [0] => Jakiś tekst
    [1] => napisany w
    [2] => indeksie
    [3] => dolnym
)

Chociaż z drugiej strony przechodząc po takiej tablicy nie będę wiedział w jakim tagu (lub bez) był fragment, więc chyba dobrym pomysłem będzie żeby ciągi zawierały tagi:
Kod
Array
(
    [0] => Jakiś tekst
    [1] => <sup>napisany w</sup>
    [2] => indeksie
    [3] => <sub>dolnym</sub>
)
wtedy już da radę takie informacjie wyłuskać.

Tagów może być dowolna ilość, ale zawsze będe pozamykane i nie będą się zagnieżdżały, ani przecinały: <sup><sub></sup></sub>

Jeśli ktoś ma pomysł jak ugryść ten temat, bardzo proszę o podzielenie się.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Hehe, kolejny raz sam sobie odpowiedam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Oto rozwiązanie (może i da się prościej, ale na razie nie wiem jak):
  1. <?php
  2.  
  3. echo $strText = "Jakiś tekst <sup>napisany w </sup> indeksie <sub>dolnym</sub>. Tak. Wiecej <sub>tagow</sub>. Jeszcze <sup>wiecej</sup>. I cos na koniec.";
  4.  
  5. $strPattern = '|\<\w+?\>.+?\</\w+?\>|';
  6.  
  7. preg_match_all( $strPattern, $strText, $arrMatches );
  8.  
  9. $arrBricks = array();
  10. $intOffset = 0;
  11. foreach ( $arrMatches[0] as $strMatch )
  12. {
  13. $intMatchPosition = strpos( $strText, $strMatch, $intOffset );
  14. $intMatchLength = strlen( $strMatch );
  15. $strPrevText = substr( $strText, $intOffset, $intMatchPosition - $intOffset );
  16. $arrBricks[] = $strPrevText;
  17. $arrBricks[] = $strMatch;
  18. $intOffset = $intMatchPosition + $intMatchLength;
  19. }
  20. $arrBricks[] = substr( $strText, $intOffset );
  21.  
  22. echo '<pre>' . print_r( $arrBricks, true ) . '</pre>';
  23.  
  24. ?>

Wynik:
Kod
Jakiś tekst <sup>napisany w </sup> indeksie <sub>dolnym</sub>. Tak. Wiecej <sub>tagow</sub>. Jeszcze <sup>wiecej</sup>. I cos na koniec.

Array
(
    [0] => Jakiś tekst
    [1] => <sup>napisany w </sup>
    [2] =>  indeksie
    [3] => <sub>dolnym</sub>
    [4] => . Tak. Wiecej
    [5] => <sub>tagow</sub>
    [6] => . Jeszcze
    [7] => <sup>wiecej</sup>
    [8] => . I cos na koniec.
)


P.S.
@frelu dzięki za pomoc!
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: 3.10.2025 - 10:12