Find_e-mail_04 - чуть улучшил и оформил в виде подпрограмм. Можно подключать и использовать как библиотеку.
// ищем один, первый e-mail. Результат в переменной $eo_mail
email_one($str)
// ищем все e-mail. Результат в массиве $arr_mail
email_several($str)
#name "Поиск в строке почтового адреса"
// Author: Vint
// Version: 1.4 (16.07.2020)
// Скрипт для Clickermann v4.14.003
//=== email_one поиск первого втретившегося e-mail ==========================
SUB(email_one, $eo_str)
// Пример вызова:
// email_one("str")
// результат в переменной $eo_mail
$eo_mail = ""
$eo_at = STRPOS($eo_str, "@")
IF($eo_at = 0)
//LOGWRITE("Почтового адреса нет")
ELSE
$eo_str_end = STRCUT2($eo_str, $eo_at, STRLEN($eo_str))
// обрезаем зад
$eo_end = STRPOS($eo_str_end, " ")
IF($eo_end = 0)
$eo_end = $eo_at + STRLEN($eo_str_end)-1
ELSE
$eo_end = $eo_at + $eo_end-2
END_IF
$eo_str = STRCUT2($eo_str, 1, $eo_end)
IF(STRCUT($eo_str, STRLEN($eo_str), 1) = ".")
$eo_str = STRCUT2($eo_str, 1, STRLEN($eo_str)-1)
END_IF
// обрезаем перёд
$eo_find = 0
$offset = 1
WHILE($eo_find = 0)
$space = STRPOS($eo_str, " ", $offset)
IF($space = 0)
$eo_find = 1
ELSE
$offset = $space + 1
END_IF
END_CYC
$eo_mail = STRCUT2($eo_str, $offset, STRLEN($eo_str))
// удаление обрамления
$eo_good = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+'.@_"
$eo_len = STRLEN($eo_mail)
$eo_at = STRPOS($eo_mail, "@")
$start = 1
$eo_end = $eo_len
FOR($eo_i=1, $eo_i < $eo_len+1)
$lit = STRCUT($eo_mail, $eo_i, 1)
IF(STRPOS($eo_good, STRCUT($eo_mail, $eo_i, 1)) = 0)
IF($eo_i < $eo_at)
$start = $eo_i+1
ELSE
$eo_end = $eo_i-1
$eo_i = $eo_len+10
END_IF
END_IF
END_CYC
$eo_mail = STRCUT2($eo_mail, $start, $eo_end)
//LOGWRITE("Email: ", $eo_mail)
END_IF
END_SUB
//=== email_several поиск всех e-mail =======================================
SUB(email_several, $es_strglob)
// Пример вызова:
// email_several("str")
// результат в массиве $arr_mail
UNDEFINE($arr_mail)
WHILE(STRLEN($es_strglob) > 0)
$es_str = $es_strglob
IF(STRPOS($es_str, "@") = 0)
//LOGWRITE("Почтового адреса нет")
$es_strglob = ""
ELSE
email_one($es_str)
ARRPUSH($arr_mail, $eo_mail)
$es_strglob = STRCUT($es_strglob, STRPOS($es_strglob, $eo_mail)+STRLEN($eo_mail), STRLEN($es_strglob))
END_IF
END_CYC
END_SUB
//==============================================================================
LOGCLEAR
//$str = "Здесь нет e-mail адресов!"
//$str = FROMCLIP() # входные данные в буфере обмена
$str = " эту почту masha_grudast@ya.ru. нужно вытащить. Ещё один pupkin.vasya@mail.ru**"
// ищем один, первый e-mail. Результат в переменной $eo_mail
email_one($str)
LOGWRITE("e-mail: ", $eo_mail)
// ищем все e-mail. Результат в массиве $arr_mail
email_several($str)
LOGWRITE()
IF(ARRSIZE($arr_mail) > 0)
LOGWRITE("Найдено адресов e-mail: ", ARRSIZE($arr_mail))
FOR($i=0, $i<ARRSIZE($arr_mail))
LOGWRITE("e-mail №", $i+1, " ", $arr_mail[$i])
END_CYC
ELSE
LOGWRITE("Почтовых адресов нет")
END_IF
HALT