Author Topic: Поиск в строке адреса e-mail  (Read 5916 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Поиск в строке адреса e-mail
« on: August 15, 2014, 02:10:32 PM »
Вот спрашивали ВК. Поиск адреса e-mail в буфере обмена. Попробовал сделать.
Пока ограничился вариантом если вокруг почты пробелы или край строки.
Code: (clickermann) [Select]
#name "Поиск в строке почтового адреса"
// Author: Vint
// Version: 1.1 (15.08.2014)

LOGCLEAR

$str = FROMCLIP()
//LOGWRITE ("$str = ", $str)
$at = STRPOS ($str, "@")

IF($at = 0)
   LOGWRITE ("Почтового адреса нет")
   $mail = ""
ELSE
   $str_end = STRCUT2 ($str, $at, STRLEN($str))

   // обрезаем зад
   $end = STRPOS ($str_end, " ")
   IF($end = 0)
      $end = $at + STRLEN($str_end)-1
   ELSE
      $end = $at + $end-2
   END_IF
   $str = STRCUT2 ($str, 1, $end)
   
   // обрезаем перёд   
   $find = 0
   WHILE($find = 0)
      $space = STRPOS ($str, " ")
      IF($space = 0)
         $mail = $str
         $find = 1
      ELSE
         $str = STRCUT2 ($str, $space+1, STRLEN($str))
      END_IF
   END_CYC   
   LOGWRITE ("Email: ", $mail)
END_IF

HALT

В однострочном варианте всё правильно. В многострочном, если почта в начале строки не могу выпилить перевод строки, адрес так и остаётся с ним. Не хватает команды. Пробовал найти как обычно "\n" не прокатило.
Нужно бы ввести поиск перевода строки. Ну и заодно ввести экранирование, заодно решится в строках символы $ " ( )


...............
Посидел, подумал и удалось отфильтровать. Теперь ограничений нет кроме того, что адрес берётся только первый если их несколько
Code: (clickermann) [Select]
#name "Поиск в строке почтового адреса"
// Author: Vint
// Version: 1.2 (15.08.2014)

LOGCLEAR

$str = FROMCLIP()
//LOGWRITE ("$str = ", $str)
$at = STRPOS ($str, "@")

IF($at = 0)
   LOGWRITE ("Почтового адреса нет")
   $mail = ""
ELSE
   $str_end = STRCUT2 ($str, $at, STRLEN($str))
   
   // обрезаем зад
   $end = STRPOS ($str_end, " ")
   IF($end = 0)
      $end = $at + STRLEN($str_end)-1
   ELSE
      $end = $at + $end-2
   END_IF
   $str = STRCUT2 ($str, 1, $end)
   
   // обрезаем перёд
   $find = 0
   WHILE($find = 0)
      $space = STRPOS ($str, " ")
      IF($space = 0)
         $mail = $str
         $find = 1
      ELSE
         $str = STRCUT2 ($str, $space+1, STRLEN($str))
      END_IF
   END_CYC
   
   // удаление обрамления
   $good = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.@_"
   $len = STRLEN($mail)
   $at = STRPOS ($mail, "@")
   $start = 1
   $end = $len
   FOR($i=1, $i < $len+1)
      $lit = STRCUT($mail, $i, 1)
      IF(STRPOS($good, STRCUT($mail, $i, 1)) = 0)
         IF($i < $at)
            $start = $i+1
         ELSE
            $end = $i-1
            $i = $len+10
         END_IF
      END_IF
   END_CYC
   $mail = STRCUT2 ($mail, $start, $end)   
   LOGWRITE ("Email: ", $mail)
END_IF
HALT
« Last Edit: August 15, 2014, 03:15:35 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск в строке адреса e-mail
« Reply #1 on: August 15, 2014, 03:14:53 PM »
Всё. Поборол несколько адресов. Теперь выводит все адреса в буфере обмена
Code: (clickermann) [Select]
#name "Поиск в строке почтового адреса"
// Author: Vint
// Version: 1.3 (15.08.2014)

LOGCLEAR

$strglob = FROMCLIP()
//LOGWRITE ("$strglob = ", $str)

UNDEFINE($arr_mail)
WHILE(STRLEN($strglob) > 0)
   $str = $strglob
   $at = STRPOS ($str, "@")
   
   IF($at = 0)
      //LOGWRITE ("Почтового адреса нет")
      $strglob = ""
   ELSE
      $str_end = STRCUT2 ($str, $at, STRLEN($str))
     
      // обрезаем зад
      $end = STRPOS ($str_end, " ")
      IF($end = 0)
         $end = $at + STRLEN($str_end)-1
      ELSE
         $end = $at + $end-2
      END_IF
      $str = STRCUT2 ($str, 1, $end)
     
      IF(STRCUT($str, STRLEN($str), 1) = ".")
         $str = STRCUT2($str, 1, STRLEN($str)-1)
      END_IF
     
      // обрезаем перёд
      $find = 0
      WHILE($find = 0)
         $space = STRPOS ($str, " ")
         IF($space = 0)
            $mail = $str
            $find = 1
         ELSE
            $str = STRCUT2 ($str, $space+1, STRLEN($str))
         END_IF
      END_CYC
     
      // удаление обрамления
      $good = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.@_"
      $len = STRLEN($mail)
      $at = STRPOS ($mail, "@")
      $start = 1
      $end = $len
      FOR($i=1, $i < $len+1)
         $lit = STRCUT($mail, $i, 1)
         IF(STRPOS($good, STRCUT($mail, $i, 1)) = 0)
            IF($i < $at)
               $start = $i+1
            ELSE
               $end = $i-1
               $i = $len+10
            END_IF
         END_IF
      END_CYC
      $mail = STRCUT2 ($mail, $start, $end)
      //LOGWRITE ("Email: ", $mail)
      ARRPUSH($arr_mail, $mail)
      $strglob = STRCUT($strglob, STRPOS($strglob, $mail)+STRLEN($mail), STRLEN($strglob))
   END_IF
END_CYC

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

Пример:
Code: [Select]
нет почты
а здесь mail@mail.ru есть
пгннп
а здесь oo(mail2@mail.ru)tt есть
oo(mail3@mail.ru)tt лорл

Лог:
Code: [Select]
16:12:45 Найдено адресов e-mail: 3
16:12:45 e-mail №1 mail@mail.ru
16:12:45 e-mail №2 mail2@mail.ru
16:12:45 e-mail №3 mail3@mail.ru

Рай для спамера. Копируешь всю страницу или код HTML. Прогоняешь, на выходе массыв e-mail - ов
« Last Edit: July 15, 2020, 05:40:56 PM by Vint »


Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Поиск в строке адреса e-mail
« Reply #2 on: September 27, 2019, 12:26:59 PM »
Современный вариант v4.14 x32, но еще можно допилить всякие штуки в виде проверок длины логина и домена, фильтр имени домена и т.д.
Code: (clickermann) [Select]
#DEFINE #DOG: 64
#DEFINE #DOT: 46
#DEFINE #UNDERSCORE: 95
 
#DEFINE #A_LOW: 97
#DEFINE #A_UP:  65
 
#DEFINE #Z_LOW: 122
#DEFINE #Z_UP:  90
 
// STATE_LOGIN <-- [@] STATE_DOMAIN_TWO <-- [.] STATE_DOMAIN_ONE <-- [a-Z] STATE_START
 
#DEFINE STATE_START: 0     
#DEFINE STATE_LOGIN: 3     
#DEFINE STATE_DOMAIN_TWO: 2
#DEFINE STATE_DOMAIN_ONE: 1
 
ARRPUSH($array_code, CODE("$"))
FREADDATA ("source_text.txt", $array_temp, 3, FSIZE("source_text.txt"))
ARRCONCAT($array_code, $array_temp)
 
$state = STATE_START
$length = ARRSIZE($array_code)
WHILE($length)
   $code = ARRPOP($array_code)
   $length = $length - 1
   PRINT("STATE = ", $state, " CODE = ", $code, STRCUT("   ", 1, 4 - STRLEN($code)) , " STRING = ", $temp_string)
   SWITCH($state)
   CASE(STATE_START)
      IF( (($code >= #A_LOW) and ($code <= #Z_LOW)) or (($code >= #A_UP) and ($code <= #Z_UP)) )
         $temp_string = CHAR($code)
         $state = STATE_DOMAIN_ONE
      END_IF   
   CASE(STATE_LOGIN)
      IF( (($code >= #A_LOW) and ($code <= #Z_LOW)) or (($code >= #A_UP) and ($code <= #Z_UP)) or ($code = #UNDERSCORE) or (($code >= #0) and ($code <= #9)) )
         $temp_string = STRCONCAT(CHAR($code), $temp_string)   
      ELSE
         PRINTC(STRCONCAT("WEB-MAIL: ", $temp_string), 204)
         $state = STATE_START
      END_IF
   CASE(STATE_DOMAIN_TWO)
      SWITCH(POW(2, ((($code >= #A_LOW) and ($code <= #Z_LOW)) or (($code >= #A_UP) and ($code <= #Z_UP))) ) * POW(3, $code = #DOG) - 1)
      CASE(1)
         $temp_string = STRCONCAT(CHAR($code), $temp_string)                           
      CASE(2)
         $temp_string = STRCONCAT(CHAR($code), $temp_string)   
         $state = STATE_LOGIN   
      DEFAULT
         $state = STATE_START 
      END_SWITCH
   CASE(STATE_DOMAIN_ONE)
      SWITCH(POW(2, ((($code >= #A_LOW) and ($code <= #Z_LOW)) or (($code >= #A_UP) and ($code <= #Z_UP))) ) * POW(3, $code = #DOT) - 1)
      CASE(1)
         $temp_string = STRCONCAT(CHAR($code), $temp_string)                           
      CASE(2)
         $temp_string = STRCONCAT(CHAR($code), $temp_string)   
         $state = STATE_DOMAIN_TWO     
      DEFAULT
         $state = STATE_START     
      END_SWITCH
   END_SWITCH 
END_CYC
 
HALT

Code: () [Select]
03:08:35 STATE = 0 CODE = 187 STRING = 0
03:08:35 STATE = 0 CODE = 208 STRING = 0
03:08:35 STATE = 0 CODE = 128 STRING = 0
03:08:35 STATE = 0 CODE = 209 STRING = 0
03:08:35 STATE = 0 CODE = 190 STRING = 0
03:08:35 STATE = 0 CODE = 208 STRING = 0
03:08:35 STATE = 0 CODE = 187 STRING = 0
03:08:35 STATE = 0 CODE = 208 STRING = 0
03:08:35 STATE = 0 CODE = 32  STRING = 0
03:08:35 STATE = 0 CODE = 116 STRING = 0
03:08:35 STATE = 1 CODE = 116 STRING = t
03:08:36 STATE = 1 CODE = 41  STRING = tt
03:08:36 STATE = 0 CODE = 117 STRING = tt
03:08:36 STATE = 1 CODE = 114 STRING = u
03:08:36 STATE = 1 CODE = 46  STRING = ru
03:08:36 STATE = 2 CODE = 108 STRING = .ru
03:08:36 STATE = 2 CODE = 105 STRING = l.ru
03:08:36 STATE = 2 CODE = 97  STRING = il.ru
03:08:36 STATE = 2 CODE = 109 STRING = ail.ru
03:08:36 STATE = 2 CODE = 64  STRING = mail.ru
03:08:36 STATE = 3 CODE = 51  STRING = @mail.ru
03:08:36 STATE = 3 CODE = 108 STRING = 3@mail.ru
03:08:36 STATE = 3 CODE = 105 STRING = l3@mail.ru
03:08:36 STATE = 3 CODE = 97  STRING = il3@mail.ru
03:08:36 STATE = 3 CODE = 109 STRING = ail3@mail.ru
03:08:36 STATE = 3 CODE = 40  STRING = mail3@mail.ru
03:08:36 WEB-MAIL: mail3@mail.ru
03:08:36 STATE = 0 CODE = 111 STRING = mail3@mail.ru
03:08:36 STATE = 1 CODE = 111 STRING = o
03:08:36 STATE = 1 CODE = 10  STRING = oo
03:08:36 STATE = 0 CODE = 13  STRING = oo
03:08:36 STATE = 0 CODE = 140 STRING = oo
03:08:36 STATE = 0 CODE = 209 STRING = oo
03:08:36 STATE = 0 CODE = 130 STRING = oo
03:08:36 STATE = 0 CODE = 209 STRING = oo
03:08:37 STATE = 0 CODE = 129 STRING = oo
03:08:37 STATE = 0 CODE = 209 STRING = oo
03:08:37 STATE = 0 CODE = 181 STRING = oo
03:08:37 STATE = 0 CODE = 208 STRING = oo
03:08:37 STATE = 0 CODE = 32  STRING = oo
03:08:37 STATE = 0 CODE = 116 STRING = oo
03:08:37 STATE = 1 CODE = 116 STRING = t
03:08:37 STATE = 1 CODE = 41  STRING = tt
03:08:37 STATE = 0 CODE = 117 STRING = tt
03:08:37 STATE = 1 CODE = 114 STRING = u
03:08:37 STATE = 1 CODE = 46  STRING = ru
03:08:37 STATE = 2 CODE = 108 STRING = .ru
03:08:37 STATE = 2 CODE = 105 STRING = l.ru
03:08:37 STATE = 2 CODE = 97  STRING = il.ru
03:08:37 STATE = 2 CODE = 109 STRING = ail.ru
03:08:37 STATE = 2 CODE = 64  STRING = mail.ru
03:08:37 STATE = 3 CODE = 50  STRING = @mail.ru
03:08:37 STATE = 3 CODE = 108 STRING = 2@mail.ru
03:08:38 STATE = 3 CODE = 105 STRING = l2@mail.ru
03:08:38 STATE = 3 CODE = 97  STRING = il2@mail.ru
03:08:38 STATE = 3 CODE = 109 STRING = ail2@mail.ru
03:08:38 STATE = 3 CODE = 40  STRING = mail2@mail.ru
03:08:38 WEB-MAIL: mail2@mail.ru
03:08:38 STATE = 0 CODE = 111 STRING = mail2@mail.ru
03:08:38 STATE = 1 CODE = 111 STRING = o
03:08:38 STATE = 1 CODE = 32  STRING = oo
03:08:38 STATE = 0 CODE = 140 STRING = oo
03:08:38 STATE = 0 CODE = 209 STRING = oo
03:08:38 STATE = 0 CODE = 129 STRING = oo
03:08:38 STATE = 0 CODE = 209 STRING = oo
03:08:38 STATE = 0 CODE = 181 STRING = oo
03:08:38 STATE = 0 CODE = 208 STRING = oo
03:08:38 STATE = 0 CODE = 180 STRING = oo
03:08:38 STATE = 0 CODE = 208 STRING = oo
03:08:38 STATE = 0 CODE = 183 STRING = oo
03:08:38 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 32  STRING = oo
03:08:39 STATE = 0 CODE = 176 STRING = oo
03:08:39 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 10  STRING = oo
03:08:39 STATE = 0 CODE = 13  STRING = oo
03:08:39 STATE = 0 CODE = 191 STRING = oo
03:08:39 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 189 STRING = oo
03:08:39 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 189 STRING = oo
03:08:39 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 179 STRING = oo
03:08:39 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 191 STRING = oo
03:08:39 STATE = 0 CODE = 208 STRING = oo
03:08:39 STATE = 0 CODE = 10  STRING = oo
03:08:39 STATE = 0 CODE = 13  STRING = oo
03:08:40 STATE = 0 CODE = 140 STRING = oo
03:08:40 STATE = 0 CODE = 209 STRING = oo
03:08:40 STATE = 0 CODE = 130 STRING = oo
03:08:40 STATE = 0 CODE = 209 STRING = oo
03:08:40 STATE = 0 CODE = 129 STRING = oo
03:08:40 STATE = 0 CODE = 209 STRING = oo
03:08:40 STATE = 0 CODE = 181 STRING = oo
03:08:40 STATE = 0 CODE = 208 STRING = oo
03:08:40 STATE = 0 CODE = 32  STRING = oo
03:08:40 STATE = 0 CODE = 117 STRING = oo
03:08:40 STATE = 1 CODE = 114 STRING = u
03:08:40 STATE = 1 CODE = 46  STRING = ru
03:08:40 STATE = 2 CODE = 108 STRING = .ru
03:08:40 STATE = 2 CODE = 105 STRING = l.ru
03:08:40 STATE = 2 CODE = 97  STRING = il.ru
03:08:40 STATE = 2 CODE = 109 STRING = ail.ru
03:08:40 STATE = 2 CODE = 64  STRING = mail.ru
03:08:40 STATE = 3 CODE = 108 STRING = @mail.ru
03:08:41 STATE = 3 CODE = 105 STRING = l@mail.ru
03:08:41 STATE = 3 CODE = 97  STRING = il@mail.ru
03:08:41 STATE = 3 CODE = 109 STRING = ail@mail.ru
03:08:41 STATE = 3 CODE = 32  STRING = mail@mail.ru
03:08:41 WEB-MAIL: mail@mail.ru
03:08:41 STATE = 0 CODE = 140 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 209 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 129 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 209 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 181 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 180 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 183 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:41 STATE = 0 CODE = 32  STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 176 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 10  STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 13  STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 139 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 209 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 130 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 209 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 135 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 209 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 190 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 191 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 32  STRING = mail@mail.ru
03:08:42 STATE = 0 CODE = 130 STRING = mail@mail.ru
03:08:43 STATE = 0 CODE = 209 STRING = mail@mail.ru
03:08:43 STATE = 0 CODE = 181 STRING = mail@mail.ru
03:08:43 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:43 STATE = 0 CODE = 189 STRING = mail@mail.ru
03:08:43 STATE = 0 CODE = 208 STRING = mail@mail.ru
03:08:43 STATE = 0 CODE = 36  STRING = mail@mail.ru
« Last Edit: September 29, 2019, 04:02:58 AM by Космич »
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск в строке адреса e-mail
« Reply #3 on: July 16, 2020, 02:28:20 PM »
Find_e-mail_04 - чуть улучшил и оформил в виде подпрограмм. Можно подключать и использовать как библиотеку.

// ищем один, первый e-mail. Результат в переменной $eo_mail
email_one($str)

// ищем все e-mail. Результат в массиве $arr_mail
email_several($str)

Code: (clickermann) [Select]
#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
« Last Edit: July 17, 2020, 02:17:26 PM by Vint »


4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Поиск в строке адреса e-mail
« Reply #4 on: July 16, 2020, 07:56:14 PM »
А если так?
Code: (clickermann) [Select]
$str = "ftp://press:parapress@ftp.paradoxplaza.com/"

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Поиск в строке адреса e-mail
« Reply #5 on: July 17, 2020, 11:59:56 AM »
Вот вроде подходящий онлайн-сервис, для проверки существования Email - http://ru.smart-ip.net/check-email/. Если конечно пользоваться осторожно. На валидность адреса он не проверяет, зато бесплатный, относительно быстрый и без шифрования (http).
Несуществующие Email, при поиске все равно нужно отсеивать, они же просто бесполезный набор символов. Или устраивать им дополнительные проверки, так как 100 процентную точность проверки существования адреса электронной почты не даст ни один сервис.

Code: (clickermann) [Select]
$url = "parapress@ftp.paradoxplaza.com" // проверяемый Email

$html = HTTPGET(STRCONCAT("http://ru.smart-ip.net/check-email/", $url))

STRSEPARATE($html, "Электронный адрес ", $arr)
STRSEPARATE($arr[1], "<", $arr2)

LOGWRITE ($arr2[0]) // "parapress@ftp.paradoxplaza.com" не существует

HALT

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск в строке адреса e-mail
« Reply #6 on: July 17, 2020, 01:56:07 PM »
А если так?
Code: (clickermann) [Select]
$str = "ftp://press:parapress@ftp.paradoxplaza.com/"
Всё нормально
Quote
parapress@ftp.paradoxplaza.com

Только это же не e-mail, это логин:пароль от ftp
Code: [Select]
ftp://логин:пароль@IP-адрес сервера
В адресе почты не может быть двоеточия, точнее может, только в кавычках. Да нафиг такие адреса, какому нормальному человеку взбредёт в голову писать в почте спецсимволы в кавычках. А если кому и нужно, пусть на другом языке обрабатывает  :D
« Last Edit: July 17, 2020, 02:05:41 PM by Vint »