Извлечь из текстовой переменной 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 |
Чтобы лишний раз не ломать голову над регулярками, я бы сделал так $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; ** ** |
Вместо звездочек поставьте открывающую фигурную скобку |
Игорь2 - при использовании в коде прямого присвоения значения $a все отлично работает, но когда я $a присваиваю переменную полученную в БД, не работает |
Если данные одинаковые, такого не может быть. |
Игорь2 - в личку скинул ссылку на видео с проблемой. Понимаю что одинаковые, но в чем проблема не пойму. |
5-Койот >вардамп а сделайте и сюда |
А не проще $lst = explode('email:', $a); $mail = trim($lst[1]); Это если как в примере email: и в конце строки! |
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 |
7 - спасибо. работает. |
8-Койот >непонятно, куда 4 байта делись.. Что то связанное с кодировками. Кодировка файла скрипта и таблицы mysql какая? |
10-Фанат NASCAR >Да у него уже все работает! [em]9-Койот >7 - спасибо. работает.[/em] Там e-mail находится в конце строки и после "email:" По этому достаточно разбить строку на 2 блока - explode('email:', $a); И во 2 блоке убрать лишние пробелы (в начале и конце) - trim($lst[1]); - ВСЕ! |
11-AlexIT >это понятно (если вникнуть), размеры чото несходятся в вардампах) |
Просто активно пытаюсь освоить регулярки, получается, но с таким скрипом что пстц. Все работает, но скорее методом тыка)) |
13-Фанат NASCAR > Если память не подводит, то достаточно хорошо регулярки описаны в кемелбуке "Программирование на Perl" Chapter 5 Pattern Matching |
14-40KHYTbIU >да много описаний, время/нагрузка, башка не запоминает уже новое.. |
Текущее время: 14:51. Часовой пояс GMT +3. |