Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти и вырезать е-маилы из текста. 
:(
    Опции темы
Wowa
Дата 25.3.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Есть некоторый текст (небольшой). Нужно найти в нем все е-маилы, вырезать их и добавить в массив.

Как это сделать?

PM WWW   Вверх
skalex
Дата 25.3.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Возможно поможет это:
Код
<?php

$text = '[email protected] foo bar [email protected] zzz bbb dsds4343 [email protected]
ds;klf;sdk [email protected]';

preg_match_all('%\b([0-9a-z._-]+@(?:[0-9a-z_-]+\.)+[a-z]{2,4})\b%Usi', $text, $m);

echo '<pre>';
print_r($m[1]);

?>


Результат:
Код
Array
(
    [0] => [email protected]
    [1] => [email protected]
    [2] => [email protected]
    [3] => [email protected]
)


Это сообщение отредактировал(а) Mace - 25.3.2005, 17:10
PM   Вверх
Mal Hack
Дата 25.3.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



В качестве рэга могу еще предложить:
Код
"#(\w|\d){1}(\w|\d|\-|_|\.|\+)+?(\w|\d){1}@((\w|\d){1,}(\-|\.){0,1}(\w|\d){1,})+?\.(\w){2,4}#"

PM ICQ   Вверх
skalex
Дата 25.3.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Mal Hack, я немного доработал твой regexp, чтобы не захламлять выходной массив:
Код

#((?:\w|\d){1}(?:\w|\d|\-|_|\.|\+)+?(?:\w|\d){1}@(?:(?:\w|\d){1,}(?:\-|\.){0,1}(?:\w|\d){1,})+?\.(?:\w){2,4})#

PM   Вверх
Mal Hack
Дата 25.3.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Э smile А что измегнил и что это дает? smile
PM ICQ   Вверх
skalex
Дата 25.3.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Код
regexp
до: #(\w|\d){1}(\w|\d|\-|_|\.|\+)+?(\w|\d){1}@((\w|\d){1,}(\-|\.){0,1}(\w|\d){1,})+?\.(\w){2,4}#
после: #((?:\w|\d){1}(?:\w|\d|\-|_|\.|\+)+?(?:\w|\d){1}@(?:(?:\w|\d){1,}(?:\-|\.){0,1}(?:\w|\d){1,})+?\.(?:\w){2,4})#


Результат

до

Код

Array
(
    [0] => Array
        (
            [0] => [email protected]
            [1] => [email protected]
            [2] => [email protected]
            [3] => [email protected]
        )

    [1] => Array
        (
            [0] => a
            [1] => a
            [2] => n
            [3] => v
        )

    [2] => Array
        (
            [0] => b
            [1] => b
            [2] => m
            [3] => y
        )

    [3] => Array
        (
            [0] => c
            [1] => b
            [2] => e
            [3] => a
        )

    [4] => Array
        (
            [0] => com
            [1] => host
            [2] => abc.xyz
            [3] => pupkin
        )

    [5] => Array
        (
            [0] => o
            [1] => s
            [2] => c
            [3] => i
        )

    [6] => Array
        (
            [0] => 
            [1] => 
            [2] => .
            [3] => 
        )

    [7] => Array
        (
            [0] => m
            [1] => t
            [2] => z
            [3] => n
        )

    [8] => Array
        (
            [0] => u
            [1] => o
            [2] => m
            [3] => g
        )

)


после

Код
Array
(
    [0] => Array
        (
            [0] => [email protected]
            [1] => [email protected]
            [2] => [email protected]
            [3] => [email protected]
        )

    [1] => Array
        (
            [0] => [email protected]
            [1] => [email protected]
            [2] => [email protected]
            [3] => [email protected]
        )

)


Это сообщение отредактировал(а) Mace - 25.3.2005, 17:31
PM   Вверх
Wowa
Дата 25.3.2005, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Так.. а какой регексп лучше использовать?
PM WWW   Вверх
skalex
Дата 25.3.2005, 18:31 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Admin, а какой regexp тебе больше нравится ? Принципиально, особой разницы нет ...
PM   Вверх
Mal Hack
Дата 25.3.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Admin @ 25.3.2005, 18:00)
Так.. а какой регексп лучше использовать?

Ну в принципе можно и по пробелам вырезать. Я тут кстати подумал, наилучший вариант - объединить два рэга smile
Код
#[A-Z0-9]{1}[A-Z0-9\-_\.\+]+?[A-Z0-9]{1}@(?:[A-Z0-9]{1,}(?:\-|\.){0,1}[A-Z0-9]{1,})+?\.[A-Z]{2,4})#i

PM ICQ   Вверх
skalex
Дата 28.3.2005, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Mal Hack, ты в своем последнем regexp-е забыл круглую скобку поставить в начале. smile
И зачем писать вещи типа [A-Z0-9]{1}, если [A-Z0-9] уже означает 1 любой символ от A до Z или любая цифра от 0 до 9 ? А также зачем {1,}, если можно написать + ?
Код
#([A-Z0-9][A-Z0-9\-_\.\+]+?[A-Z0-9]@(?:[A-Z0-9]+(?:\-|\.)?[A-Z0-9]+)+?\.[A-Z]{2,4})#i


Цитата
Ну в принципе можно и по пробелам вырезать.

Что ты имеешь в виду ?
PM   Вверх
Mal Hack
Дата 28.3.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Mace @ 28.3.2005, 10:38)
ты в своем последнем regexp-е забыл круглую скобку поставить в начале.

Можно вообще опустить smile

Цитата(Mace @ 28.3.2005, 10:38)
Что ты имеешь в виду ?

\s[^\s]+@[^\s] smile

Цитата(Mace @ 28.3.2005, 10:38)
И зачем писать вещи типа [A-Z0-9]{1}, если [A-Z0-9] уже означает 1 любой символ от A до Z или любая цифра от 0 до 9 ? А также зачем {1,}, если можно написать + ?

Вечером сяду додумаю до конца. В примнципе ты прав.
PM ICQ   Вверх
skalex
Дата 28.3.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Блин, регулярные выражения можно бесконечно составлять... smile
Цитата
Ну в принципе можно и по пробелам вырезать.

ИМХО самое короткое регулярное выражение:
Код
%[^\s]+@.+\..+\b%U

PM   Вверх
Mal Hack
Дата 28.3.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Mace @ 28.3.2005, 12:46)
\..+\b

А че это за фишка такая?
PM ICQ   Вверх
skalex
Дата 28.3.2005, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Цитата(Mal @ 28.3.2005, 15:26)
Цитата(Mace @ 28.3.2005, 12:46)
\..+\b

А че это за фишка такая?

\b - претензия "на границе слова".
PM   Вверх
IZ@TOP
Дата 28.3.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(Mace @ 28.3.2005, 16:49)
\b - претензия "на границе слова".

То есть?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Mal Hack
Дата 28.3.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(IZ @ 28.3.2005, 19:27)
То есть?

Что-то вроде "не буква" или "конец слова"
PM ICQ   Вверх
skalex
Дата 28.3.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Цитата(IZ @ 28.3.2005, 19:27)
Цитата(Mace @ 28.3.2005, 16:49)
\b - претензия "на границе слова".

То есть?

Ну да, как бы строго начало (или конец) слова... Т.е. шаблон не может например соприкасаться с цифрой. Т.е. %\b[abc]+\b% не удовлетворяет 123abc456, но будет удовлетворять 123 abc 456. С помощью этой претензии удобно искать слова.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1462 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.