LINUX.ORG.RU

[Erlang][Regexp] Помогите составить регулярку

 ,


0

1

Доброго времени суток.

Есть строка вида: shk <user@mail.com>, shk s <user@shk.com> ... Необходимо вытащить все почтовые адреса, на выходе должен быть список вида:

[user@mail.com, user@shk.com]

Пытаюсь сделать:

re:run("shk <user@mail.com>, shk s <user@shk.com>", "<(.*)?>",  [multiline, {capture, all_but_first, list}]).

Но получаю {match,[«user@mail.com>, shk s <user@shk.com»]}

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

Спасибо.


Вот как сделал это я:

$ echo "shk <user@mail.com>, shk s <user@shk.com>" > testregexpfile
$ cat testregexpfile
shk <user@mail.com>, shk s <user@shk.com>
$ grep -o -e "<[^<>]*>" testregexpfile | sed -e "s/</[/g" | sed -e "s/>/]/g"
[user@mail.com]
[user@shk.com]

adriano32 ★★★
()

Взгляните, например, сюда.

Надеюсь, вы понимаете, что на 100% вы эту задачу (вытаскивание всех валидных email-адресов) регэкспами не решите.

shylent
()
Ответ на: комментарий от shylent

задачу прочитайте, может ТС сам генерирует ленту почт, а потом передает это к программе на эрланг. не надо везде искать слонов

Donnie_Darko
()
Ответ на: комментарий от Donnie_Darko

Да зачем так все в штыки воспринимать, а? Я просто указал, что в «реальном мире», так сказать, этот подход не совсем применим - реальная грамматика там действительно сложна.

Кстати, если ТС сам генерирует список адресов, то зачем их передавать одной строкой, а потом парсить? Бессмыслица какая-то получается, вам так не кажется?

shylent
()
Ответ на: комментарий от Donnie_Darko

Почти,

но мне нужно:

[code]{match,[«<user@mail.com>»,«user@mail.com»]}[/code]

Да зачем так все в штыки воспринимать, а? Я просто указал, что в >«реальном мире», так сказать, этот подход не совсем применим - >реальная грамматика там действительно сложна.

Нет, строка приходит именно в таком формате.

'foo bar <«foo > bar»@bar.com>'

Такие варианты опускаются.

shk
() автор топика
Ответ на: комментарий от shk

> Такие варианты опускаются.

Как вы собираетесь детектировать, какой вариант «такой», а какой «не такой»?

А какие не опускаются тогда? Вы же RFC читали, да? Там достаточно разных «вариантов», - боюсь, вы так просто и не решите, что опускать, а что нет.

shylent
()

Неправильно матчит из-за умолчательной жадности регулярок(выбирается возможный максимум). Поставьте (.*?) - что бы они были не жадными, все должно работать правильно.

recon88
()
Ответ на: комментарий от Donnie_Darko

Нет, на тот момент готового ничего не нашел, а позиция разработчиков twisted - «twisted.web - это веб-сервер, а не платформа для создания фреймворков», что, впрочем, соответствует действительности.

Таким образом, есть два, так сказать, пути:

  • Прикрутить какую-нибудь там django через blockingCallFromThread.
  • Оставить асинхронный функционал «в стороне» от всего и отдавать данные через, допустим REST-like интерфейс или, там, *-RPC какой-нибудь (очевидно, с помощью того же twisted.web)

Надо сказать, что лично мне второй вариант нравится все больше и больше - из-за отсутствия жесткой привязки функционала на twisted к самому web-интерфейсу.

</offtopic>

shylent
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.