Skip to content

tikhonishchenko/tikh_email_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tikh_email_parser

Розширений парсер електронних адрес з підтримкою коментарів та спеціальних символів за допомогою pest. Цей парсер розбирає складні електронні адреси та витягує локальну частину і домен.

Crate: https://crates.io/crates/tikh_email_parser Docs: https://docs.rs/tikh_email_parser/0.1.0/tikh_email_parser/

Опис

Парсер використовує pest для розбору електронних адрес на основі розширеної граматики. Він підтримує формати електронних адрес з коментарями, спеціальними символами та може перевіряти і витягувати компоненти з електронних адрес.

Технічний опис процесу парсингу

Парсер аналізує рядок електронної адреси, розбиваючи його на локальну частину та домен за допомогою символу @. Локальна частина та домен можуть містити спеціальні символи та коментарі. Парсер використовує розширену граматику, яка підтримує:

  • Коментарі: Текст, обмежений дужками ( та ), який може з'являтися в різних місцях адреси.
  • Кавички: Локальна частина може бути взята в подвійні лапки " ", щоб дозволити спеціальні символи.
  • Спеціальні символи: Такі як ! # $ % & ' * + - / = ? ^ _ { | } ~.

Процес парсингу виконується наступним чином:

  1. Видалення коментарів: Коментарі ігноруються або обробляються окремо.
  2. Розбір локальної частини: Може бути простим текстом або взятою в лапки.
  3. Розбір домену: Складається з піддоменів, розділених крапками.
  4. Валідація: Перевірка відповідності адреси розширеній граматиці.
  5. Витягування компонентів: Повернення структури з локальною частиною та доменом.

Використання

Щоб використовувати парсер, запустіть CLI-додаток і надайте файл, що містить електронні адреси для розбору.

cargo run -- parse emails.txt

Щоб відобразити інформацію про автора:

cargo run -- credits

Граматика

Парсер використовує наступну граматику:

WHITESPACE = { " " | "\t" } email = { cfws? ~ local_part ~ "@" ~ domain ~ cfws? }
local_part = { dot_atom | quoted_string }
domain = { dot_atom }
dot_atom = { dot_atom_text ~ ("." ~ dot_atom_text)* }
dot_atom_text = { [a-zA-Z0-9!#$%&'*+/=?^
`{|}~-]+ }
quoted_string = { """ ~ qcontent* ~ """ }
qcontent = { qtext | quoted_pair }
qtext = { !["\] ~ ANY }
quoted_pair = { "\" ~ ANY }
cfws = { (comment | FWS)+ }
comment = { "(" ~ (ctext | quoted_pair | comment)* ~ ")" }
ctext = { ![()\] ~ ANY }
FWS = { (WSP* ~ CRLF)? ~ WSP+ }
WSP = _{ " " | "\t" }
CRLF = _{ "\r\n" | "\n" }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published