LINUX.ORG.RU

perl regexp


0

0

подскажите регэксп неудовлетворяющий выражению...

на входе мыло, надо чтобы регулярное выражение удовлетворяло всем мыльникам, кроме слова fuck в любом месте localpart - email'a. ну или хотябы неудовлетворяло всему в чем есть fuck.


блин, может объяснил непонятно.

короче чтобы удовлетворяло любому и-мейл, кроме e-mail, который содержит определенное слово в первой составной своей (localpart)

типа: '.+?\@domain\.ru' - катит на все что похоже на мыло, а надо чтобы до domain.ru не попадалось слово fuck

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

:) ага.

попросили меня. говорят в мыльнике виндовом или в прибуде к мыльнику от спама, есть возможность фильтровать по perl-regexp. Но там нельзя написать полноценную проверку, только то что в // обычно. Все со слов просившего...

ПС. Мопед не мой я просто разместил объяву ;)

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

не, это я уже пробовал. и вперед поиск и назад....

perl -e '{ $_ = qw(asdfuckdasd@mail.ru); /(?!.*fuck)(.*?)\@mail\.ru/; { print "$1\n"; } ; }'

в любом случае поиск то удачен, как я понимаю... ладно, надо поспать и само все пройдет :)

sicus
() автор топика

совершенно недавно столкнулся с похожей задачей

$ echo -e 'fcuk@mail.ru\naaa@mail.ru\nbbb@mail.ru\naaafuckbbb@mail.ru\nfuckbbb@mail.ru' | pcregrep '^(.(?!fuck))+@mail.ru'
fcuk@mail.ru
aaa@mail.ru
bbb@mail.ru
fuckbbb@mail.ru

единственная проблема - если строка начинается с fuck, то она не фильтруется.

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

если ты добиваешься просто отфильтровать мыльник с fuck то тебе надо так.

echo -e 'fcuk@mail.ru\naaa@mail.ru\nbbbfuck@mail.ru\naaafuckbbb@mail.ru\nfuckbbb@mail.r u' | pcregrep '^((?!.*?fuck.*?)).+?@mail.ru'

а мне нужно чтобы само регулярное выражение было ложным на мыльнике с факом. Можно объяснить так: найти всё, что похоже на мыльник, но не содержит указанное слово в localpart.

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

лишние скобки зачем-то нарисовал, надо так:


echo -e 'fuck@mail.ru\naaa@mail.ru\nbbbfuck@mail.ru\naaafuckbbb@mail.ru\nfuckbbb@mail.r u' | pcregrep '^(?!.*?fuck.*?).+?@mail.ru'

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

а оно разве не будет? из последнего примера

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

> а мне нужно чтобы само регулярное выражение было ложным на мыльнике с факом. Можно объяснить так: найти всё, что похоже на мыльник, но не содержит указанное слово в localpart.

так я тебе то и дал. Выражение '^(.(?!fuck))+@mail.ru' ложно на любом адресе, содержащем fuck. Как я уже сказал, проблема только в том, что оно мачит адрес, если он начинается с fuck.

Если же fuck где либо в середине, то всё ОК.

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

> проблема только в том, что оно мачит адрес, если он начинается с fuck.

потому что у тебя выражение начинается с точки: ^(.(?!fuck))+@mail.ru .
если бы было записано так ^(?!.*?fuck.*?).+?@mail.ru то тогда бы не грепало ниодин email с fuck. посмотри выше я пример твой переделал.

тока я такой пример отсылал для проверки знакомому, он вроде сказал что не катит... хотя хз, он потерял интерес, я тоже :)

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