Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrażenia regularne operujacy HTMLu
Forum PHP.pl > Forum > PHP
sticker
Od 2 dni siedze nad jednym wyrazeniem regularnym i mam juz troszke tego dość sad.gif Oczywiście zwracam sie z prośbą do osób ktore potrafią wiecej w tej kwestii niż ja
Otóż problem jest następujący: Potrzebuje wyciagnąć z teksu wszystkie hiperlinki zawierające w sobie słowo mailto: (czyli wszystkie odnośniki do maili w takiej postaci)

Załóżmy że mamy tekst testowy winksmiley.jpg
  1. <a href='mailto:support@abc.com'>abc</a> <a href='mailto:support1@abc.com'>abc1</a><br>

Tekst oczywiście nie jest przełamany i jest w jednej linii ale nie wiem czy tu bedzie to widać . Wyrażenie które udało mi sie do tej chwili wymysleć jest bardzo bliskie rozwiązaniu:
Kod
"/<[aA] +[^\/]+mailto:[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})[^>]+>[a-zA-Z0-9]*<\/[aA]>/"

i rzeczywiście działa pod warunkiem że ktoś nie da mi miedzy znacznikami <a.....> (w tym miejscu)</a> jakiegoś tagu htmlowego bytu na przykład <b></b> co dałoby nam przykład taki:
  1. <a href='mailto:support@abc.com'><b>abc</b></a> <a href='mailto:support1@abc.com'>abc1</a><br>


Czytam sobie O'Reillly wyrażenia regularne i nie moge tam znaleźć rozwiązania mimo że ten problem jest zasygnalizowany ..... (Jakas kicha w tej książce) Próbowałem alternacji ale żadna mi nie pasowała

Prosze o pomoc Mysle że to dla was też niezłe wyzwanie i może sie przydać na przyszłość Pozdrawiam i czekam niecierpliwie na odpowiedź smile.gif
bendi
  1. <?php
  2.  
  3. $s ="<a href="mailto:support@abc.com">abc</a>
  4. <a href='mailto:support1@abc.com'>abc1</a><br>";
  5.  
  6. preg_match_all( '!href=("|')?mailto:(.*?)(?(1)1| ).*?>(.*?)</a>!si', $s, $m );
  7. print_r( $m );


Wyświetla:
Kod
Array
(
    [0] => Array
        (
            [0] => href="mailto:support@abc.com">abc</a>
            [1] => href='mailto:support1@abc.com'>abc1</a>
        )

    [1] => Array
        (
            [0] => "
            [1] => '
        )

    [2] => Array
        (
            [0] => support@abc.com
            [1] => support1@abc.com
        )

    [3] => Array
        (
            [0] => abc
            [1] => abc1
        )

)


Więc chyba wsio gra. Jakby co http://bedkowski.pl/php_regex/
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.