Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyrażenia regularne operujacy HTMLu
sticker
post 6.10.2005, 15:14:39
Post #1





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


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


--------------------
Go to the top of the page
+Quote Post
bendi
post 6.10.2005, 16:02:01
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


  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/


--------------------
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: 24.07.2025 - 16:32