Adresi: mailto ayıklanması için Regexp

4 Cevap php

Ben dize bir blok almak ve biçimini eşleşen dizeleri bulabilirsiniz belgeli exp istiyorum:

<a href="mailto:x@x.com">....</a>

Ve bu biçimi eşleşen tüm dizeleri için, bu mailto: sonra bulunan e-posta adresini dışarı çıkartacaktır. Herhangi bir düşünce?

Bu uygulama, iç ve hiçbir spam amaç için gereklidir!

4 Cevap

Eğer gelen her şeyi eşleştirmek isterseniz:

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism';
preg_match_all($r,$html, $matches, PREG_SET_ORDER);

Bunu fastern ve shortern için:

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>`ism';
preg_match_all($r,$html, $matches, PREG_SET_ORDER);

2 eşleşen grup ne olursa olsun e-posta olacaktır.

Örnek:

$html ='<div><a href="mailto:test@live.com">test</a></div>';

$r = '`\<a([^>]+)href\=\"mailto\:([^">]+)\"([^>]*)\>(.*?)\<\/a\>`ism';
preg_match_all($r,$html, $matches, PREG_SET_ORDER);
var_dump($matches);

Çıktı:

array(1) {
  [0]=>
  array(5) {
    [0]=>
    string(39) "test"
    [1]=>
    string(1) " "
    [2]=>
    string(13) "test@live.com"
    [3]=>
    string(0) ""
    [4]=>
    string(4) "test"
  }
}

Farklı seçenekler bol regexp.info üzerine vardır

Bir örnek olacaktır:

\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b

"mailto:" Buna prepend saçmadır.

/(mailto:)(.+)(\")/

Ikinci eşleşme grup e-posta adresi olacak.

Sen iç PHP filtresi ile çalışabilirsiniz http://us3.php.net/manual/en/book.filter.php

(Onlar e-posta doğrulayarak ya da hijyen için özel olarak orada bir tane var -> FILTER_VALIDATE_EMAIL)

Greets