Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg_match zmiana kolejności tagów html
kebq
post 22.12.2010, 15:29:26
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 2.12.2005

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


witam,

mam przykładowy string z kodem html zawierający podciąg w formie
  1. <p>
  2.  
  3. <img src="bla.png">text text</p>
  4.  


chciałbym wywalić <img> przed <p>

przygotowałem nawet wyrażnie regularne które chyba znośnie łapie mój przypadek:
  1. <p\b[^>]*>[\s]*<img[^>]*>#i

jednak nie mam za bardzo pomysłu jak wyciąć w całości tag <p>, przesunąć za <img> a następnie zwrócić cały html ze zmianami
Go to the top of the page
+Quote Post
vermis
post 22.12.2010, 15:36:41
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Skoro masz wyrażenie które zwraca cały tag img to wytnij go ze stringa źródłowego. I zostają ci 2 stringi. Zapisujesz w odpowiedniej kolejności i już.

Kod
<p\b[^>]*>[\s]*(<img[^>]*>)#i


trzeci parametr preg_match zwróci tablicę, gdzie kolejno będzie cały dopasowany stringi oraz cały tag img

Ten post edytował vermis 22.12.2010, 15:39:50


--------------------
Go to the top of the page
+Quote Post
kebq
post 22.12.2010, 15:45:11
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 2.12.2005

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


hm... uściślę trochę

  1. some html code here
  2.  
  3. <h1>foo</h1>
  4.  
  5. <p>
  6.  
  7. <img src="bla.png">text text</p>
  8.  
  9.  
  10. some more html here


chciałbym osiągnąć:
  1. some unchanged html code here
  2.  
  3. <img src="bla.png">
  4.  
  5. <h1>foo</h1>
  6.  
  7. <p>text text</p>
  8.  
  9. some unchanged more html here


nie mam pomysłu jak "przerzucić" np tag h1 nie tracąc treści w nim zapisanej

BTW gdyby dało się lepiej napisać to wyrażenie regularne to też chętnie posłucham

BTW2 preg match zwraca znalezisko plus jeszcze dodatkową liczbę, czym ona jest?
po elementach tablicy lecę za pomocą foreach

Ten post edytował kebq 22.12.2010, 15:48:05
Go to the top of the page
+Quote Post
vermis
post 23.12.2010, 12:32:02
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Napisz wyrażenie, które wyciągnie ten fragment:
Kod
<h1>foo</h1>

<p>

<img src="bla.png">text text</p>


Fragment odpowiedzialny za tag img daj w nawiasy.
Trzeci parametr preg_matcha zwróci tablicę.
print_r() wyświetli ci jej zawartość. Powinieneś otrzymać element 0 -> cały fragment, element 1->tag img
Teraz wycinasz z elementu 0 zawartość elementu 1. Teraz tworzysz nowy ciąg czyli img i to co zostało w elemencie 0.
Teraz wystarczy podmienić wszystko w tekście źródłowym.

Można pokusić się o skrócenie kodu i użycie preg_replace().


--------------------
Go to the top of the page
+Quote Post
kebq
post 28.12.2010, 11:54:18
Post #5





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 2.12.2005

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


co masz dokładnie na myśli mówiąc o wzięciu tagu img w nawias?

problemem jest także to że wcześniej w kodzie znajduje się pusty nagłówek h1 więc go także "łapie"
próbowałem go wykroić za pomocą:
  1. $html = preg_replace("<h1>([\s]*)</h1>", "", $html);

jednak z niewiadomych przyczyn nie łapie tego nagłówka

próbowałem także:
  1. $html = preg_replace("<h1>([\s\t\r\n]*?)</h1>", "", $html);


eksperymentuje też z preg_match_all ponieważ w kodzie jest kilka podobnych fragmentów do edycji, tyle że obrazek otoczony jest dodatkowo np. tagiem strong
Go to the top of the page
+Quote Post
Methestel
post 29.12.2010, 12:03:30
Post #6





Grupa: Zarejestrowani
Postów: 46
Pomógł: 10
Dołączył: 30.06.2008

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


  1. $text = 'some unchanged html code here
  2. <h1>foo</h1>
  3. <p><img src="bla.png">text text</p>
  4. some unchanged more html here';
  5. $text = preg_replace('/(<.*?)(<img .*?>)(.*>)/si', '$2$1$3', $text);
  6. echo '<pre>';
  7. echo '</pre>';
Osobiście nie polecam jednak tego rozwiązania. Zalecam sparsowanie tego przy pomocy XML Parser. Kod będzie nieco bardziej skomplikowany ale też znacznie bardziej uniwersalny i będziesz miał znacznie większe możliwości modyfikacji XML-a. Będziesz też pewny że dostaniesz w wyniku poprawnego XML-a.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 23:21