регулярное выражение для электронных писем, НЕ заканчивающееся сценарием замены - PullRequest
1 голос
/ 01 июня 2010

В настоящее время я изменяю свое регулярное выражение для этого:

Извлечение адресов электронной почты в html-блок в ruby ​​/ rails

По сути, я создаю еще один обфускатор, который использует ROT13, анализируя блок текста для всех ссылок, которые содержат реферер mailto (используя hpricot). Один из вариантов использования, который не улавливается, заключается в том, что если пользователь просто набрал адрес электронной почты (не превращая его в ссылку с помощью tinymce)

Итак, вот основной процесс моего метода: 1. проанализировать блок текста для всех тегов с помощью href = "mailto: ..." 2. замените каждый тег функцией javascript, которая изменяет это на ROT13 (используя этот скрипт: http://unixmonkey.net/?p=20) 3. После того, как все ссылки будут запутаны, передайте получившийся блок текста в другую функцию, которая анализирует все электронные письма (эта функция имеет регулярное выражение электронной почты, которое инвертирует адрес электронной почты, а затем добавляет интервал к этому электронному письму - чтобы отменить его обратно)

На шаге 3 предполагается очистить блок текста от оставшихся писем, которые НЕ РАЗРЕШЕНЫ в тегах href (то есть hpricot не проанализировал его). Проблема в том, что письма, которые были преобразованы в ROT13, все еще находятся в моем регулярном выражении. То, что я хочу поймать, - это просто электронные письма, которые не преобразованы в ROT13.

Как мне это сделать? хорошо, все электронные письма, которые были конвертированы, имеют в конце ".replace". то есть мне нужно получить все электронные письма без этой строки. пока у меня есть это регулярное выражение:

/ \ Ъ ([A-z0-9 ._% + -].. + @ [А-Z0-9 .-] + [AZ] {2,4} (»заменить)) \ B / I

но это получает все электронные письма с завершающим '.relace, я хочу получить противоположность, и я в настоящее время озадачен этим. какая-нибудь помощь от гуру регулярных выражений там?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Вот регулярное выражение + блок текста, который я анализирую:

http://www.rubular.com/r/NqXIHrNqjI

Как видите, первые два «адреса электронной почты» уже скрыты с помощью ROT13. Мне нужно регулярное выражение, которое получает электронные письма ohhellzyeah@ribute.com и kaboom@yahoo.com

1 Ответ

4 голосов
/ 01 июня 2010

На негативных взглядах

Вы можете использовать отрицательный взгляд, чтобы утверждать, что шаблон не соответствует.

Например, следующее регулярное выражение соответствует всем строкам, которые не заканчиваются на ".replace" string:

^(?!.*\.replace$).*$

В качестве другого примера, это регулярное выражение соответствует всем a*b*, кроме aabb:

^(?!aabb$)a*b*$

В идеале

Смотри также


Конкретное решение

В этом сценарии работает следующее регулярное выражение: ( см. На rubular.com ):

/\b([A-Z0-9._%+-]+@(?![A-Z0-9.-]*'\.replace\b)[A-Z0-9.-]+\.[A-Z]{2,4})\b/i
...