从php中的任何字符串中提取所有url / domains

时间:2014-02-20 04:37:45

标签: php regex url

我使用 php 并从文本框中获取以下文本字符串。

这是字符串我有:

header1            header2             edit
b-1246431          12.01.13            1246431  |  blog.domain.net            1232,00 ‌‌
details
b-1312231          12.01.13            1246431  |  blog.domain.co.uk          12312,00
b-2344311          12.01.13            1246431  |  www.domain.com/             9129,00 ‌‌
b-2344322          12.01.13            1246431  |  http://abc.de              1332,00 ‌‌
b-2344322          13.01.13            1246431  |  www.cdf.de/                 21140,00             ‌‌edit
b-1233422          06.01.13            1246431  |  www.dto.de/site1      21110,00
b-1233542          06.01.13            1246431  |  www.ghj.ca/site2.html      28110,00             ‌‌             edit
b-1231242          06.01.13            1246431  |  www.another.de            2101,00             ‌‌
b-1231231          04.01.13            1246431  |  onlyme.info/  

我想要输出

blog.domain.net
blog.domain.co.uk
www.domain.com/
http://abc.de
www.cdf.de/
www.dto.de/site1
www.ghj.ca/site2.html
www.another.de
onlyme.info/  

字符串会改变。我总是需要仅提取的网址。 问题可能是:有时网址以www,http开头,或者甚至两者都没有。他们仍应被视为网址。

我已查看这些帖子: extracting one or more urls from a string in php http://daringfireball.net/2010/07/improved_regex_for_matching_urls

...但是我的文本字符串没有用...

2 个答案:

答案 0 :(得分:2)

使用正则表达式尝试:

<?php
$input = "header1            header2             edit
b-1246431          12.01.13            1246431  |  blog.domain.net            1232,00 ‌‌
details
b-1312231          12.01.13            1246431  |  blog.domain.co.uk          12312,00
b-2344311          12.01.13            1246431  |  www.domain.com/             9129,00 ‌‌
b-2344322          12.01.13            1246431  |  http://abc.de              1332,00 ‌‌
b-2344322          13.01.13            1246431  |  www.cdf.de/                 21140,00             ‌‌edit
b-1233422          06.01.13            1246431  |  www.dto.de/site1      21110,00
b-1233542          06.01.13            1246431  |  www.ghj.ca/site2.html      28110,00             ‌‌             edit
b-1231242          06.01.13            1246431  |  www.another.de            2101,00             ‌‌
b-1231231          04.01.13            1246431  |  onlyme.info/";

preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $input, $result);

foreach ($result[0] as $url)
{
    echo $url . "<br />\n";
}

或者在这里查看我的PHPFiddle:PHPFiddle

答案 1 :(得分:0)

试试这个

$lines = explode("\n", $s);
foreach ($lines as $line) {
    if (strpos($line, "|") !== false) {
        $url = trim(explode(" ", trim(explode('|', $line)[1]))[0]);
        echo $url."<BR>";
    }
}

适用于php 5.4 +