Построить регулярное выражение на поиск ЛЮБЫХ УРЛ(ов) в тексте...

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

Zhenya

Новичок
Построить регулярное выражение на поиск ЛЮБЫХ УРЛ(ов) в тексте...

Здравствуйте!
Помогите пожалуйста построить регулярное выражение или функцию на поиск/замену всяких видов URL в тексте...

Например, найти в тексте все указанные ниже

www.site1.ru
site1.ru
http://www.site2.psite.net
http://site2.psite.net
http://www.site2.psite.net.ru
www.site2.psite.net.ru

===вообщем домены любых уровней (вместо точки может быть пробел)===

===и сайты содержащие:

[http://www.site2.psite.net]
(http://site2.psite.net)
---http://www.site2.psite.net---

Помогите...
 

zerkms

TDD infected
Команда форума
сам хоть палец о палец ударять пробовал?
 

Zhenya

Новичок
Автор оригинала: zerkms
сам хоть палец о палец ударять пробовал?
конечно пробовал...
не получается...
слова нужные вырезаются через пробел или рядом которые стоят

пробую примерно так

\W+ - найдет "[" или "("
\w+ - например www
\. - точка после www
\w+ - снова слово
\. - опять точка
\w+ - снова слово
\W+ -найдет "]" или ")"

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

Андрейка

Senior pomidor developer
Zhenya
ну дык если запрос к гуглю у вас состоит тоже из одних букв W, то он явно ничего не найдет
 

Zhenya

Новичок
Автор оригинала: Андрейка
Zhenya
ну дык если запрос к гуглю у вас состоит тоже из одних букв W, то он явно ничего не найдет
дайте пример без W... я что и спрашиваю...:)
 

Zhenya

Новичок
Вот как пытаюсь делать:
PHP:
/([(https?|ftp)://])*[-a-z0-9]+(\.[a-z0-9]+)*\.(ru|com|info)/i
тогда строка вида
PHP:
Текст оставить https://www.tets1.test2.test3.info и этот текст оставить
будет иметь вид:
PHP:
Текст оставить  и этот текст оставить
...то что нужно...
но как заставить искать и адреса вида:
PHP:
Текст оставить tets1.test2.test3.info и этот текст оставить
т.е., когда строка адреса не начинается ни с www, ни с http|https|ftp
?
 

Dovg

Продвинутый новичок
Текст оставить tets1.test2.test3.info и этот текст оставить
dovg.poshel.kurit - это тоже урл?

для начала определись, что ты считаешь урлами
формализуй задачу
 

Zhenya

Новичок
Начало поста было:

Например, найти в тексте все указанные ниже

www.site1.ru
site1.ru
http://www.site2.psite.net
http://site2.psite.net
http://www.site2.psite.net.ru
www.site2.psite.net.ru

===вообщем домены любых уровней (вместо точки может быть пробел)===

===и сайты содержащие:

[http://www.site2.psite.net]
(http://site2.psite.net)
---http://www.site2.psite.net---

Еще накопал такое:

PHP:
([(https?|ftp)://])*[-a-z0-9]+(\.[a-z0-9]+)*\.(ru|com|info)(?>[\]\).,?!])*
найдет такую строку:
https://www.tets1.test2.test3.info!]

-~{}~ 02.06.08 11:31:

а такая
PHP:
(?>[\[\(.,?!])*([(https?|ftp)://])*[-a-z0-9]+(\.[a-z0-9]+)*\.(ru|com|info)(?>[\]\).,?!])*
найдет такую
[!(https://www.tets1.test2.test3.info!]
 

Zhenya

Новичок
Автор оригинала: triumvirat
эт как так?
например: http://www.vasya pupkin.pupkin.ru

-~{}~ 02.06.08 11:42:

Вообщем для моей задачи почти подойдет вот это выражение:
PHP:
/(?>[-\[\(.,?!])*([(https?|ftp)://])*[-a-z0-9]+(\.[a-z0-9]+)*\.(ru|com|info|org|ua|[a-z]+)(?>[-\]\).,?!])*/i
оно вроде ищет все предложенные мной варианты, но с пробелом чета как то...:(

-~{}~ 02.06.08 11:45:

хотя выражение
(?>[-\[\(.,?!])*([(https?|ftp)://])*[-a-z0-9 ]+(\.[a-z0-9 ]+)*\.(ru|com|info|org|ua|[a-z]+)(?>[-\]\).,?!])*

и эту проблемку решает...

кто может предложить более оптимальный способ?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Интересно почему эта скользкая тема с парсингом до сих пор не закрытаю...
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху