1

Тема: АНК: Как найти в тексте e-mail? По собаке

Есть текст в несколько строк. Нужно как-то научить прогу выцеплять в тексте электронную почту.
Т.е. грубо говоря текст

ололо
трололо vasya@pupkin.ru ololol
trololo

Как вот из этого можно заставить прогу выцепить почту vasya@pupkin.ru и записать её в переменную, для дальнейшей работы с переменной?

2

Re: АНК: Как найти в тексте e-mail? По собаке

Chainsaw пишет:

Есть текст в несколько строк. Нужно как-то научить прогу выцеплять в тексте электронную почту.
Т.е. грубо говоря текст

ололо
трололо vasya@pupkin.ru ololol
trololo

Как вот из этого можно заставить прогу выцепить почту vasya@pupkin.ru и записать её в переменную, для дальнейшей работы с переменной?

Нужно использовать регулярные выражения. Простейший пример:

x:="ололо`nтрололо vasya@pupkin.ru ololol`ntrololo"
RegExMatch(x, "\w*@\w*.\w*" , x)
msgbox %x%

3

Re: АНК: Как найти в тексте e-mail? По собаке

Скрипт работает некорректно. Почту вида troll@gnet.el.ru обрезает то вида troll@gnet.el
Точек может быть ещё больше. Нужно обрезать почту с правой стороны в соотвтсвтвии со знаком пробела или ">"

4

Re: АНК: Как найти в тексте e-mail? По собаке

Chainsaw, каков вопрос:

трололо vasya@pupkin.ru ololol

— таков ответ. Что мешало задать правильный вопрос: регулярное выражение для адреса электронной почты - Поиск в Google и банально прочитать то, что уже было сделано на эту тему?

5 (изменено: Chainsaw, 2011-10-19 15:32:15)

Re: АНК: Как найти в тексте e-mail? По собаке

Я прочитал про то что такое регулярное выражение.
Но всё равно пока не представляю как представить это синтаксисом АНК.

У меня есть такой вариант:

Needle = >
Sleep 100
Send, ^{vk43} ;# Buffer
Sleep 100
Haystack = %clipboard%
Sleep 100

IfInString, Haystack, %Needle%

    {
    MsgBox, Found %Needle%
    }
else
    {
    IfInString, Haystack, %A_Space%
        {
        MsgBox, Found Space
        }
    else
        {
        MsgBox, Nothing
        }
    Sleep 100
    }


Return

Однако всё равно косячно работает. Поскольку бывает что после e-mail'a нет ни знака ">" ни пробела.
Просто отсутствуют символы. И как определить отсутствие символов я не знаю.

Кстати никто не знает - есть ли возможность объединить 2 значения через OR в случае с IfInString, у меня получалось это делать только с обычным IF, но не слитно с другими значениями.

6

Re: АНК: Как найти в тексте e-mail? По собаке

Вот тут почитайте про регулярные выражения. Или лучше скачать справку по AutoHotkey одним файлом.

7 (изменено: Zohann, 2011-10-19 23:25:10)

Re: АНК: Как найти в тексте e-mail? По собаке

Берем все до пробела по обе стороны от собаки

x:="ололо`nтрололо troll@gnet.el.ru ololol`ntrololo"
RegExMatch(x, "\S+@\S+", x)
msgbox %x%

или до пробела влево и до > вправо

x:="ололо`nтрололо troll@gnet.el.ru>ololol trololo"
RegExMatch(x, "\s(\S+@\S+)>", x)
msgbox %x1%

А вот как пробел и ">" привести к одному регулярному у меня не получилось.

8

Re: АНК: Как найти в тексте e-mail? По собаке

Если нужно получить только одно (первое) вхождение почты, то так:

Text1 =
(
ололо
трололо vasya@pupkin.ru ololol
trololo
)

Text2 =
(
ололо
трололо vasya@pip.kin.ru> ololol
trololo
)

Text3 =
(
ололо
трололо vasya@pop.kin.ru
trololo
)

Text4 =
(
ололо
трололо vasya@pap.k.in.ru
)

Loop 4
   MsgBox, % RegExReplace(Text%A_Index%, "s).* (.*?@.*?)([ >\r\n]|$).*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder