Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PCRE Jak wydobyć tagi nie mające domknięcia, preg_match
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Cześć,

Mam kod HTML w którym muszę wykryć tag nie mający zamknięcia na jednej linii domknąć go i skopiować jego część otwierającą na następną linie.
np.
Cytat
mój <span class="pink">różowy pies
ma<span>
5 <span class="blue">niebieskich</span> łat
<span class="grey">szary</span> ogon, a jego <span class="brown>brązowe oczy,
również są</span>
<span class="green">zielone</span>
Do postaci:
mój <span class="pink">różowy pies</span>
<span class="pink">ma<span>
5 <span class="blue">niebieskich</span> łat
<span class="grey">szary</span> ogon, a jego <span class="brown>brązowe oczy,</span>
<span class="brown>również są</span>
<span class="green">zielone</span>


Muszę w tym celu wykryć dodatkowe tagi otwierające, które nie mają na danej linii pary. Idzie mi jak po grudzie. Kod poniżej to udowadnia. Jak wyłuskać te niedomknięte tagi na danej linii przy użyciu wyrażeń regularnych?

  1. $str = '<span class="blabla">blabla <span class="two">2.two</span></span><span class="three">3.three</span><span class="four">4.four';
  2. $patt = '#(?P<tag_o><span.*?>)(?P<cnt>.*?(?R)?)(?P<tag_c></span>)#i';
  3.  
  4. $a = preg_match_all($patt, $str, $aMatch);
  5.  
  6. foreach($aMatch as $key => $val) {
  7. if(is_numeric($key)) {
  8. unset($aMatch[$key]);
  9. }
  10. }
  11. var_dump($a, $aMatch);
  12. echo '-------------------------------<br/><br/>';
  13. $patt = '#(?P<tag_o><span.*?>)(?P<cnt>.*?(?R)?)(?P<tag_c></span>)(?P<tag_o2><span.*?>)(?R)?(?P<cnt2>.*?(?R)?)#i';
  14.  
  15. $a = preg_match_all($patt, $str, $aMatch);
  16.  
  17. foreach($aMatch as $key => $val) {
  18. if(is_numeric($key)) {
  19. unset($aMatch[$key]);
  20. }
  21. }
  22. var_dump($a, $aMatch);
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: 14.09.2025 - 16:38