Исправить выражение

Статус
В этой теме нельзя размещать новые ответы.

Rigor

Профессор
Регистрация
1 Июн 2008
Сообщения
203
Реакции
35
Сколько не читал мануалов никак не могу въехать в эти РВ. Вот, например, простейший пример - нужно составить регулярку URL

Я сделал так:

preg_match("/(Для просмотра ссылки Войди или Зарегистрируйся)[A-Za-z0-9-]+/.[A-Za-z0-9/-]+(/.[A-Za-z0-9/-]+)/"

Бред конечно. Ткните носом плз, что и на что нужно исправить. И почему. А то задолбался уже. Заранее спасибо
 
www если идет то всегда после него стоит точно


это как понимать? экранирование? )

+ в урле еще могут быть & ? # % символы


/ лишняя


а вообще давайте пример урла, который хотите распознать регуляркой, поможем
 
Любые url. Чтобы пропускал любые возможные виды. Т.е. с шттп, www. И стем и с другим. 2, 3 уровня.

Спасибо за помощь)
 
\b(https?|ftp|file:(//[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]
 
serrgo

Ошибка высветилась:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in Z:\home\plan.ru\www\users\settings.php on line 41
 
Скинь полную регулярку
 
Как вариант:
PHP:
function hrefCallback($p)
 {
   $name=htmlspecialchars($p[0]);
   $href=!empty($p[1])?$name:"http://$name";
   return "<a href=\"$href\">$name</a>";
 }
 function hrefActivate($str)
 {
    return preg_replace_callback(
    '{
      (?:
       (\w+://)                  # Протокол с двумя слэшами
       |                         # - или -
       www\.                     # просто начинается с www
      )
      [\w-]+(\.[\w-]+)*          # имя хоста
      (?: : \d+)?                # порт не обязательно
      [^<>"\'()\[\]\s]*          # URI без кавычек и скобок
      (?:                        # Последний символ быть...
          (?<! [[:punct:]])      # не пунктуацией
         |(?<= [-/&+*])          # но допустимо окончание на -/&+*
      )
    }xis',
    "hrefCallback",
    $str
    );
 }
 $text='У нас есть ссылки вот такие:(http://site.ru), www.site?a=b , http://site.net. www.site.ru:80';
 echo hrefActivate($text);
 
tostrss

Код:
if(!preg_match("\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]", $_POST['blog']))
    {

Dudarik

Спасибо, но нужна именно регулярка...
 
Не уверен в правильности выше приведенной регулярки.., но код будет таким
PHP:
if(!preg_match('%\b(https?|ftp|file)://[-A-Z0-9+&@#/\%?=~_|!:,.;]*[-A-Z0-9+&@#/\%=~_|]%i', $_POST['blog']))

если переменная $_POST['blog'] должна содержать только ссылку, без текста, я бы посоветовал такую регулярку
PHP:
if(!preg_match('%^https?://(www\.)?[a-z0-9-.]+[a-z0-9.?/&=\%#_-]*$%iD', $_POST['blog']))

Здесь более жесткое условие и не включены символы :,;!~| имхо, они не нужны.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху