2010-11-06 73 views
0

我想从一个纯文本字符串在PHP中提取一个或多个网址。下面是一些例子从一个字符串提取一个或多个网址在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)需要删除像'('或')'和空格(不包括连字符)的所有符号
)字点需要用符号替换。 ,所以网络com将.com .com

p.s我知道PHP validation/regex for URL,但不能解决我将如何使用它来实现最终目标。

谢谢

+3

'mydomain.com = HTTP:// www.mydomain.com' – NikiC 2010-11-06 09:36:52

回答

4

在这种情况下,将很难得到100%正确的结果。 根据输入您可以尝试强制只是匹配最流行的第一级域(添加更多的话):

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

您可能需要删除该单词边界(\ b)中得到不同的结果。

你可以在这里进行测试:

http://bit.ly/dlrgzQ

编辑:关于你的情况下 1)删除了什么? 2),这可能在PHP来实现,如:

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

但我有几个重要事项:

  • 这个表达式更像是指导,而不是实际生产代码
  • 与这种工作对文本的宽松规则至少是古怪的 - 并且增加更多特殊情况会使其更加糟糕。考虑这一点 - 即使计算器没有做到这一点:

http://example.org

但不!

将example.org

  • ,如果你说你有什么要实现它会更容易?因为如果你想处理某种在WWW某处的文本,那么这是非常糟糕的主意!你不应该这样做(正如你所说 - 你不明白Regex!),因为这只是XSS蠕虫的可能。最好考虑某种降价语言或BBCore或其他。

还可以获得感兴趣:http://htmlpurifier.org/

+1

+1,但你可能要加上'[AZ] {2}'为一个替代顶级域名,允许国际和特殊域名,如'amazon.de','apple.tv'等(并从列表中删除'uk'和'ly')。如果你想匹配这样的域名。 – 2010-11-06 10:56:28

相关问题