Регулярное выражение

Onu

Новичок
Регулярное выражение

Сразу прошу прощения если подобные темы здесь невпервой , но в поиске и FAQ я так и не смог найти ответа на свой вопрос.

А вопрос простой - мне нужно 1 простое регулярное выражение для проверки URL. С проверкой URL в обычном .txt выражение
PHP:
ereg("[\/]+")
справлялось запросто , а вот с проверкой URL в файле .xml или в обычном .htm оно никак не справляется по понятным причинам. Пытался в инете найти универсальное выражение для проверки URL , нашел , но оба они в итоге выдают мне 0-ое соответствие :(

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

iSlayter

Новичок
PHP:
if (!preg_match("/^(http:\/\/([a-zA-Z0-9-])+(\.([a-zA-Z0-9-])+)*(\.([a-zA-Z0-9~\/]){2,6}+)+)?$/", $url)) {
 echo 'url неверен.';
}
 

Onu

Новичок
Спасибо за оперативный ответ , но выдает следующее :(

br />
<b>Warning</b>: ereg() [<a href='function.ereg'>function.ereg</a>]: REG_BADRPT in <b>C:\AppServ\www\my\links__title_filter.php</b> on line <b>25</b><br />
<br />

Насколько я понял не нравится тег ему :(
 

Lews

Новичок
Регулярку не надо искать, ее надо писать:)
Что значит, "для проверки URL"?
 

Onu

Новичок
Автор оригинала: Lews
Регулярку не надо искать, ее надо писать:)
Что значит, "для проверки URL"?
Есть файлы .html , .txt , .xml , в них куча текста и URL'eй , мне отсеить только URL . Файлы размером по 500-600 КБ , руками это делать сложно , для .txt файлов все нормально уже получается.
 

Cron

Новичок
Так это. Давайте мух от борща отделять. Типы (названия) файлов причем? Регулярному выражению нужен входной текст, а не файл.

Пользуйте preg_match_all

Типа
$all=implode("\n",file("ttt.log"));

preg_match_all("!<a..что вы хотите...</a>!is",$all,$all);

ПС: А Вам, кстати, зачем урлы? ;)
 

Cron

Новичок
присутствием тегов в ссылках.
ИМХО проще искать сначало ссылки, а потом делать урлы. Хотя все зависит от конкретной задачи ТС.
 

Onu

Новичок
Мне нужны именно URL , а не ссылки , но не могу отсеить из .htm или .xml файла нормально ибо теги мешаются
 

Onu

Новичок
Автор оригинала: dark-demon
регулярка примерно такая:
~(\w+://.+?)[ "\n]~
Спасибо , но выдает опять ошибку (((( Не понимаю почему , но с простейшим выражением никаких ошибок а с более сложными сразу ошибки :(

Хотя , наверное вся проблема в том что я считываю файл по строкам и ищу в целой строке (т.е. если ВСЯ строка не соответствует рег.выражению то программа возвращает ошибку), а надо искать во всем тексте или хотябы внутри строки. Как осуществить поиск ВНУТРИ строки ?
 

Romeros

Новичок
Код:
$file_content = file_get_contents("a.txt");
preg_match_all("/http:\/\/[-a-z0-9_]+(\.[-a-z0-9_]+)+\/?[-a-z0-9_:@&?=+,.!\/\~*'%$]*(?<![,.!?])/",$file_content,$matches);
теперь в $matches[0] все url, я попробовал - вроде работает.
 
Сверху