2010-11-06 2 views
0

Я пытаюсь извлечь один или несколько URL-адресов из текстовой строки в php. Вот некоторые примерыизвлечение одного или нескольких URL-адресов из строки в php

"mydomain.com has hit the headlines again" 

экстракт "http://www.mydomain.com"

"this is 1 domain.com and this is anotherdomain.co.uk but sometimes http://thirddomain.net" 

экстракт "http://www.domain.com", "http://www.anotherdomain.co.uk", "http://www.thirddomain.net"

Есть два случая, мне нужно - я имею в виду регулярное выражение , но не полностью их понимают
1) все символы типа '(' или ')' и пробелы (исключая дефисы) необходимо удалить
2) слово dot необходимо заменить символом. , так что dot com будет .com

p.s Я знаю PHP validation/regex for URL, но не могу разобраться, как бы я использовал это для достижения конечной цели.

Thanks

+3

'mydomain.com = HTTP: // www.mydomain.com' – NikiC

ответ

4

В этом случае будет сложно получить 100% правильные результаты. В зависимости от входа вы можете попытаться заставить соответствие только наиболее популярные домены первого уровня (прибавить к нему):

(?:https?://)?[a-zA-Z0-9\-\.]+\.(?:com|org|net|biz|edu|uk|ly|gov)\b 

Вы, возможно, потребуется удалить границу слова (\ б), чтобы получить разные результаты.

Вы можете проверить его здесь:

http://bit.ly/dlrgzQ

EDIT: о ваших случаях 1) удалить из чего? 2) это может быть сделано в PHP, как:

$result = preg_replace('/\s+dot\s+(?=(com|org|net|biz|edu|and_ect))/', '.', $input); 

Но у меня есть несколько важных заметок:

  • Это Regex больше похожи на руководство, а не фактический код производства
  • Работа с такого рода Свободные правила по тексту по меньшей мере дурацкие - и добавление более специальных случаев сделает его еще более бесполезным. Рассмотрим это - даже StackOverflow не делает этого:

http://example.org

, но нет!

example.org

  • Было бы проще, если бы вы сказали, что вы пытаетесь достичь? Потому что, если вы хотите обработать какой-то текст, который будет проходить где-то на WWW позже, тогда это очень плохая идея! Вы не должны делать это по своему усмотрению (как вы сказали - вы не понимаете Regex!), Так как это может быть просто из червей XSS. Лучше подумайте о каком-то языке Markdown или BBCore или еще.

также заинтересовались: http://htmlpurifier.org/

+1

+1, но вы можете добавить' [AZ] {2} ', как альтернативный домен верхнего уровня, позволяющий использовать международные и специальные домены, такие как 'amazon.de',' apple.tv' и т. д. (и вывести 'uk' и' ly' из списка). Если вы хотите совместить такие домены. –

Смежные вопросы