Как исключить изображения из шаблона регулярных выражений электронной почты? - PullRequest
0 голосов
/ 12 января 2020

Я использую это регулярное выражение: \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b, которое я нашел из https://emailregex.com.

Однако это приводит к таким изображениям, как 175x100@3x.jpg для быть посчитанным как электронная почта.

Я провел небольшой поиск и обнаружил, что могу использовать отрицательный прогноз, но пакет GoLang regexp не предлагает эту функцию. Есть ли альтернативный шаблон регулярных выражений, в котором я мог бы использовать?

1 Ответ

0 голосов
/ 12 января 2020

Вы можете сопоставить любые добавочные номера, которые вы будете игнорировать sh, а затем сопоставить и зафиксировать шаблон TLD. Если значение группы 1 не пустое, возьмите совпадение, иначе отмените его:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := ` 175x100@3x.jpg and  175x100@3x.com`
    rex := regexp.MustCompile(`\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.(?:jpe?g|([A-Za-z]{2,6}))\b`)
    results := rex.FindAllStringSubmatch(s, -1)
    for _, match := range results  {
        if len(match[1]) > 0 {
          fmt.Printf("%q\n", match[0])
        }
    }
}

См. Демонстрационную версию Go онлайн . Вывод: 175x100@3x.com.

Здесь шаблон (?:jpe?g|([A-Za-z]{2,6})) соответствует jpg или jpeg и соответствует, а захватывает в группу 1 из любых двух-шести букв ASCII. if len(match[1]) > 0 { fmt.Printf("%q\n", match[0]) } part печатает совпадение, только если сопоставлена ​​группа 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...