Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrażenie regularne - przechywtywanie do momentu napotkania wzorca
Forum PHP.pl > Forum > PHP
fiasko
Mam taki oto ciąg :

  1. $body ='<td style="background: url(images/obrazek.jpg); background-repeat: repeat-y; " valign="top" rowspan="9">
  2. ssdfs ssdfs ssdfs ssdfs
  3. </td>'
  4. $dopasowanie = '/<td[\s]{0,2000}style="background\:[\s]{0,2000}url\(([^>]+?)<\/td>/';
  5. preg_match_all($dopasowanie, $body , $rezultat );
  6.  


problem jest tu ([^>]+?) - nie wiem jak ująć dopasowanie do wystąpienia wzorca td>

powinno być coś takiego ([^td>]+?) - ale to nie jest poprawna forma ujęcia wzorca i nie mogę przechwycić tego całego ciągu. Przez to dopasowanie napotyka problem z wystąpieniem znaku > który występuje tuż za rowspan="9". Jego usunięcie oczwyiśccie powoduje , że wyrażenia działa poprawnie.

Jak poprawnie napisać dopełnienie wzorca td> a nie zanku > ?


szagi3891
Ja bym najpierw doradzał wyszukać wystąpienia znaczników td a dopiero potem dalsze podwyszukiwania. A tak żeby już w ogóle było dobrze to xpath najlepiej sprawdza się do przeszukiwania dokumentów xml. (html musi być poprawnym xml, czyli wystarczy żeby był poprawny xhtml).

  1. $all = '[^<>]*';
  2.  
  3. $q1 = preg_quote('<td', '/') . $all . preg_quote('>', '/');
  4. $q2 = preg_quote('</td>', '/');
  5.  
  6. $dopasowanie = '/' . $q1 . $all . $q2 . '/';
  7.  
  8. preg_match_all($dopasowanie, $body, $rezultat);
  9.  
  10.  
  11. print $dopasowanie . "\n\n";
  12.  
  13. print '<pre>';
  14. print_r($rezultat);
  15. print '</pre>';
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.