Форум на Kuban.ru (http://forums.kuban.ru/)
-   Веб-дизайн и программирование (http://forums.kuban.ru/f1030/)
-   -   Извлечь из текстовой переменной e-mail (PHP) (http://forums.kuban.ru/f1030/izvlech-_iz_tekstovoj_peremennoj_e-mail_php-6650363.html)

Койот 27.03.2015 17:39

Извлечь из текстовой переменной e-mail (PHP)
 
Прошу совета.
Есть идентичные текстовые данные, например
$a="--- phone: > +7 (928) 123 456 моб. +7 (918) 123 456 моб. url: skype: email: [email]mail@yandex.ru[/email] ";
$a="--- phone: 8(918)4444444 url: [url]www.site.ru[/url] skype: email: [email]mail@mail.ru[/email]";
Данные подгружаются по запросу из MySQL
Необходимо "выдрать" из $a адрес email (учитывая что в некоторых значениях в конце адреса стоит "пробел" и присвоить это значение переменной $mail

igorleee 27.03.2015 18:22

Чтобы лишний раз не ломать голову над регулярками, я бы сделал так

$a = "--- phone: 8(918)4444444 url: [url]www.site.ru[/url] skype: email: [email]mail@mail.ru[/email]";

$string_items = array_reverse(explode(' ', $a));

foreach ($string_items as $item)
**
if (filter_var($item, FILTER_VALIDATE_EMAIL))
**
$mail = $item;
break;
**
**

igorleee 27.03.2015 18:23

Вместо звездочек поставьте открывающую фигурную скобку

Койот 27.03.2015 19:36

Игорь2 - при использовании в коде прямого присвоения значения $a все отлично работает, но когда я $a присваиваю переменную полученную в БД, не работает

igorleee 28.03.2015 00:34

Если данные одинаковые, такого не может быть.

Койот 28.03.2015 10:25

Игорь2 - в личку скинул ссылку на видео с проблемой. Понимаю что одинаковые, но в чем проблема не пойму.

fanatnascar 28.03.2015 11:52

5-Койот >вардамп а сделайте и сюда

SanekSp 28.03.2015 12:22

А не проще

$lst = explode('email:', $a);
$mail = trim($lst[1]);

Это если как в примере email: и в конце строки!

Койот 28.03.2015 12:53

6
Сделал 2 переменные а и b (а - получаю из БД, b-присваиваю)
делаю вывод echo для $a и $b
----------------------
значение а: --- phone: > +7 (928) 444 4444 моб. +7 (918) 444 4444 моб. url: skype: email: [email]mail@yandex.ru[/email]
значение b: --- phone: > +7 (928) 444 4444 моб. +7 (918) 444 4444 моб. url: skype: email: [email]mail@yandex.ru[/email]
----------------------
теперь формирую вардамп
----------------------
вардамп для $a: string(109) "--- phone: > +7 (928) 444 4444 моб. +7 (918)444 4444 моб. url: skype: email: [email]mail@yandex.ru[/email] "
вардамп для $b: string(104) "--- phone: > +7 (928) 444 4444 моб. +7 (918) 444 4444 моб. url: skype: email: [email]mail@yandex.ru[/email]"
вардамп для $mail полученного из $b: string(20) "mail@yandex.ru"
вардамп для $mail полученного из $a: NULL

Койот 28.03.2015 12:59

7 - спасибо. работает.

fanatnascar 29.03.2015 00:10

8-Койот >непонятно, куда 4 байта делись.. Что то связанное с кодировками. Кодировка файла скрипта и таблицы mysql какая?

SanekSp 29.03.2015 13:54

10-Фанат NASCAR >Да у него уже все работает!
[em]9-Койот >7 - спасибо. работает.[/em]
Там e-mail находится в конце строки и после "email:"
По этому достаточно разбить строку на 2 блока - explode('email:', $a); И во 2 блоке убрать лишние пробелы (в начале и конце) - trim($lst[1]); - ВСЕ!

fanatnascar 29.03.2015 22:39

11-AlexIT >это понятно (если вникнуть), размеры чото несходятся в вардампах)

fanatnascar 29.03.2015 22:41

Просто активно пытаюсь освоить регулярки, получается, но с таким скрипом что пстц. Все работает, но скорее методом тыка))

40KHYTbIU 30.03.2015 09:52

13-Фанат NASCAR > Если память не подводит, то достаточно хорошо регулярки описаны в кемелбуке "Программирование на Perl" Chapter 5 Pattern Matching

fanatnascar 30.03.2015 13:02

14-40KHYTbIU >да много описаний, время/нагрузка, башка не запоминает уже новое..


Текущее время: 14:51. Часовой пояс GMT +3.