我使用 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
...但是我的文本字符串没有用...
答案 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 +