Помогите исправить регулярку

LONGMAN

Dark Side of the Moon..
Помогите исправить регулярку

У меня есть такой код
PHP:
if(preg_match('#\S*(\.ge|\.com|\.net|\.ru|\.mobi|\.org|\.ua)\S*#isU',$msg)) send_to_admin($msg);
Мне нужно переписать регулярку так, что бы он логировал только те сообшения в котором после етих доменов в первом символе идёт ^a-z0-9 то есть всё кроме букв и цифр. Значит site.ru или site.ru/file реклама, а site.ru2 или site.rus не реклама. Я переписал его так
PHP:
preg_match('#\S+(\.ge|\.com|\.net|\.ru|\.mobi|\.org|\.ua)*([^a-z0-9]{0.1})#isU',$msg)
Но не сработал как я хотел. Что в этом регулярке не так?
 

DiMA

php.spb.ru
Команда форума
1. вынести точки от домена за скобки
2. \S замени на что-то конкретное
3. \.ua)*([^a-z0-9]{0.1}) на \.ua)([^a-z0-9]{0,1}) (ошибка с * и . )
4. модификатор U - нахрена козе боян? Не нужен.
5. модификатор s не нужен
 

LONGMAN

Dark Side of the Moon..
Переписал так
PHP:
preg_match('#\S+(\.ge|\.com|\.net|\.ru|\.mobi|\.org|\.ua)([^a-z0-9]{0,1})#isU',$msg)
Опять не работает как мне нужно, site.rus считает рекламой

-~{}~ 23.06.09 11:34:

DiMA
Поздно почитал, шас посмотрю
 

LONGMAN

Dark Side of the Moon..
DiMA
Переписал так
PHP:
preg_match('#[a-z0-9\._-]+\.(ge|com|net|ru|mobi|org|ua)([^a-z0-9]{0,1})#i',$msg)
но всёравно нетак работает

-~{}~ 23.06.09 11:46:

Без {0,1} даже site.ru не шитает рекламой
 

LONGMAN

Dark Side of the Moon..
iceman
Не катит.
site.rus считает рекламой

-~{}~ 23.06.09 12:09:

Не понимаю почему
PHP:
^
не работает
 

iceman

говнокодер
тогда читай мануал

-~{}~ 23.06.09 11:33:

ну ка дай входные значения
 

LONGMAN

Dark Side of the Moon..
iceman
Читаю и имхо всё правильно делаю. Не знаю в чём косяк. Вот код:
PHP:
$msg = 'www.site.russ';
if(preg_match('#[a-z0-9\._-]+\.(ge|com|net|ru|mobi|org|ua)([^a-z0-9])+#i',$msg)) echo 'Реклама';
else echo 'Не реклама';
Мне нужно чтоб здесь он выводил "не реклама", а на site.ru выводил "реклама"
 

iceman

говнокодер
PHP:
$msg = 'www.site.ru0/awf';
if(!preg_match('#\.(ge|com|net|ru|mobi|org|ua)([a-z0-9])+#i',$msg)) echo 'Реклама';
else echo 'Не реклама';
все нормально выводит!
 

LONGMAN

Dark Side of the Moon..
x-yuri
Можешь объяснить почему не работает регулярка
PHP:
preg_match('#[a-z0-9\._-]+\.(ge|com|net|ru|mobi|org|ua)([^a-z0-9]{1})#i',$msg)
как должен? А именно, он должен выдать true если после этих доменов НЕ идёт буква или цифра. Значит мне нужно что бы он выдавал на site.ru site.ru/ site.ru- TRUE, а на site.ru2 site.rus site.rus/ FALSE. Мог и забыть об этой регулярке, он нетак уж и важно для меня, но просто не понимаю суть, почему не работает, а это меня бесит :)
 

x-yuri

Новичок
понятно, что она должна делать. Для каких вариантов она не работает?
 

iceman

говнокодер
LONGMAN
этих доменов НЕ идёт буква или цифра
с чего ты взял?

она говорит что после ru идет символ не (буква или цифра)
но о конце строки речи не идет!

-~{}~ 23.06.09 14:00:

чем тебя моя регулярка не устраивает, да и твоя работает...
только к домену в конце добавь слеш и не парься

-~{}~ 23.06.09 14:03:

PHP:
if(preg_match('#[a-z0-9\._-]+?\.(ge|com|net|ru|mobi|org|ua)(([^a-z0-9]+)|(\b))#i',$msg))
 

DiMA

php.spb.ru
Команда форума
афтар, мля, не пиши больше ни слова, уши вянут от бессмысленных слов

а напиши 20 примеров разных доменов, когда нужно вернуть true (реклама), когда false (не реклама), тогда я применю дедуктивный метод :) и догадаюсь, что ты на самом деле хочешь
 

LONGMAN

Dark Side of the Moon..
iceman
Спасибо большое..

-~{}~ 23.06.09 18:15:

DiMA
Мы ещё применим ваш дедуктивный метод Холмс, только не ругайтесь :)
 
Сверху