Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите сделать регулярное выражение для захвата e-mail
 
 автор: Владимир22   (24.01.2007 в 18:06)   письмо автору
 
 

Мне нужно вытащить с одного сайта e-mailы.
Среди прочего, последовательность нужной информации на странице такая:

<BR>E-mail: <B>rklynk@ukr.net</B><BR>
но может быть и с пробелами и переносами, типа:

<BR>E-mail:
                  <B>hrr@gеect.com</B><BR>

Как можно всё это обозначить в рег. выражении и как вывести в итоге все адреса со страницы?

   
 
 автор: bronenos   (24.01.2007 в 18:40)   письмо автору
 
   для: Владимир22   (24.01.2007 в 18:06)
 

Если не ошибаюсь то примерно так

$page = file (url);
preg_match_all ('#([a-z0-9_\-]+)@([a-z0-9_\-]+)\.([a-z]{2,6})#im', $page, $email);
for ($i=0; $i<count($email[0]); $i++)
 print "<b>{$email[1][$i]}</b>@<i>{$email[2][$i]}</i>.{$email[3][$i]}";

   
 
 автор: Бамси   (24.01.2007 в 18:56)   письмо автору
 
   для: bronenos   (24.01.2007 в 18:40)
 

А чего значит ")@(" Это как понятЬ? Что делают эти круглые скобки? Почему просто не +@ ?

   
 
 автор: bronenos   (24.01.2007 в 19:05)   письмо автору
 
   для: Бамси   (24.01.2007 в 18:56)
 

Эти скобки группируют адрес хост и домен чтоб можно было обращаться отдельно потом
Можно и без них но у меня хорошее настроение и я сделал так =)

   
 
 автор: bronenos   (24.01.2007 в 19:07)   письмо автору
 
   для: Бамси   (24.01.2007 в 18:56)
 

+ относится не к собаке а к первой скобке и означает повторение знака один или более раз

   
 
 автор: bronenos   (24.01.2007 в 18:42)   письмо автору
 
   для: Владимир22   (24.01.2007 в 18:06)
 

Я понимаю, что вы предлагали воспользоваться навигационными участками кода, но все же этот способ мне кажется более универсальным если вы захотите например изменить дизайн страницы...

   
 
 автор: Владимир22   (24.01.2007 в 19:09)   письмо автору
 
   для: bronenos   (24.01.2007 в 18:42)
 

А что у вас за переменная $emails - откуда взялась или что там должно быть?
Вот сделал код по вашему образцу:

<?  
$page 
file("http://site/index.htm");
preg_match_all ('#([a-z0-9_\-]+)@([a-z0-9_\-]+)\.([a-z]{2,6})#im'$page$emails);
foreach (
$emails as $e)
print 
"<b>{$e[1]}</b>@<i>{$e[2]}</i>.{$e[3]}";
?> 

Выдаёт:
Warning: preg_match_all() expects parameter 2 to be string, array given in ...... line 3
Invalid argument supplied for foreach() ......line 4

   
 
 автор: Киналь   (24.01.2007 в 19:32)   письмо автору
 
   для: Владимир22   (24.01.2007 в 19:09)
 


<?  
$page 
file("http://site/index.htm");

$page implode($page' ');

preg_match_all ('#([a-z0-9_-]+)@([a-z0-9_-]+).([a-z]{2,6})#im'$page$emails);
foreach (
$emails as $e)
print 
"<b>{$e[1]}</b>@<i>{$e[2]}</i>.{$e[3]}";
?> 

   
 
 автор: bronenos   (24.01.2007 в 20:00)   письмо автору
 
   для: Киналь   (24.01.2007 в 19:32)
 

Вывод иначе, попробуйте распечатать массив, он иначе устроен, foreach не подойдет.

   
 
 автор: bronenos   (24.01.2007 в 19:58)   письмо автору
 
   для: Владимир22   (24.01.2007 в 19:09)
 

В эту переменную складывается то что нашел скрипт. И вы передаете страницу как массив.
А надо как строку.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования